![]() |
АвтовпорядковуванняDate: 2014-03-11; view: 720. Алгоритм, за яким дані вибираються з вихідних таблиць запиту, описується в тексті запиту на спеціальній мові – мові запитів. Текст запиту складається з кількох частин: § опис запиту § об’єднання запитів § впорядковування результатів § автовпорядковування § опис підсумків
Обов’язковою є лише перша частина – опис запиту. Всі інші присутні за необхідністю. Опис запиту визначає джерела даних, поля вибірки, групування та інші Об’єднання запитів визначає, як будуть об’єднані результати виконання кількох запитів. Впорядковування результатів визначає умови впорядковування рядків результату запиту. Автовпорядковування дозволяє включити режим автоматичного впорядковування рядків результату запиту. Опис підсумків визначає, які підсумки необхідно розраховувати і яким чином групувати результат.
Звіт РеєстрДокументівВитратнаНакладна Звіт РеєстрДокументівВитратнаНакладна просто виводитиме список існуючих в базі даних документів ВитратнаНакладна в порядку їх дат і номерів. Створимо в конфігураторі новий об’єкт конфігурації Звіт «РеєстрДокументівВитратнаНакладна». Перейдемо на закладку Макет і запустимо конструктор вихідної форми. В якості джерела даних для запиту виберемо об’єктну таблицю документів ВитратнаНакладна. З цієї таблиці виберемо такі поля: § Номер § Дата § Склад § Клієнт
Рисунок 1 Зверніть увагу, що при виборі полів Склад і Клієнт в список вибраних полів підбираються також поля Представление.Склад і Представление.Клієнт. Справа в тому, що в загальному випадку вважається, що ці поля будуть виводитися в клітки табличного документу. Оскільки відповідні поля Склад і Клієнт є посиланнями (мають тип СправочникСсылка), то у випадку, якщо в якості значення параметра для виводу буде передане значення-посилання, система виконуватиме додатковий запит для одержання представлення цього поля (яке і буде виведене в документ), в результаті чого виведення звіту уповільниться. Тому система при виборі полів-посилань пропонує відразу ж включити в список вибраних полів і представлення полів-посилань, розраховуючи на те, що саме вони і використовуватимуться для виведення в документ. Після цього перейдемо на закладку Порядок і вкажемо, що результат запиту повинен спочатку бути впорядкованим по значенню поля Дата, а потім – по значенню поля ВитратнаНакладна,Ссылка. Рисунок 2 Перейдемо на закладку Звіт і скинемо прапорець «Використовувати побудовник звіту»
Рисунок 3
Натиснемо ОК. Конструктор сформує форму звіту і макет. відкриємо модуль форми і знайдемо в ньому процедуру РеєстрДокументівВитратнаНакладна. В цій процедурі формується текст запиту, який буде використовуватися для одержання даних, що нас цікавлять
Запрос.Текст = "ВЫБРАТЬ | ВитратнаНакладна.Номер, | ВитратнаНакладна.Дата КАК Дата, | ВитратнаНакладна.Склад, | ПРЕДСТАВЛЕНИЕ(ВитратнаНакладна.Склад), | ВитратнаНакладна.Клієнт, | ПРЕДСТАВЛЕНИЕ(ВитратнаНакладна.Клієнт) |ИЗ | Документ.ВитратнаНакладна КАК ВитратнаНакладна | |УПОРЯДОЧИТЬ ПО | Дата, | ВитратнаНакладна.Ссылка";
Знайдіть у тексті процедури фрагменти, які дають змогу виводити результат запиту в табличний документ.
Запустимо 1С в режимі налагоджування і оглянемо результат роботи нашого звіту. Рисунок 4 Звіт Рейтинг товарів Звіт Рейтинг товарів буде містити інформацію про те, продаж яких товарів є для нашого підприємства найприбутковішим в даному періоді. На прикладі звіту ми проілюструємо, як відбирати дані за певний період, як задавати параметри запиту і як використовувати в запиті дані кількох таблиць і включати в результат запиту всі дані одного з джерел. Перш ніж розпочати створення звіту, перейменуємо довідник Номенклатура на ДНоменклатура, що дасть нам у майбутньому змогу уникнути двозначності. Це можна зробити будь-яким методом, наприклад, за допомогою контекстного меню об’єкту. Створимо новий об’єкт конфігурації Звіт РейтингТоварів. Перейдемо на закладку Макети і викличемо конструктор вихідної форми. На закладці Таблиці і поля виберемо об’єктну таблицю довідника ДНоменклатура і віртуальну таблицю регістру накопичення ПродажіОбороты. Рисунок 5
Після цього встановимо курсор на таблицю ПродажіОбороты і викличемо діалог вводу параметрів віртуальної таблиці
Рисунок 6 Потім виберемо з таблиць поля ДНоменклатура.Ссылка і ПродажіОбороты.НацінкаОборот.
Рисунок 7 Перейдемо на закладку Зв’язки і побачимо, що конструктор вже створив зв’язок між двома вибраними таблицями – значення зміни регістру Матеріал повинне бути рівним посиланню на елемент довідника ДНоменклатура. Єдине, що нам залишається, це скинути прапорець біля таблиці регістру і встановити його біля таблиці довідника.
Рисунок 8 Перевстановлення прапорця дає змогу вибирати всі елементи довідника і ставити їм у відповідність значення обороту націнки з регістру. Внаслідок цього в результат запиту потраплять всі товари і для деяких з них вказуватимуться обороти націнки. Якщо якісь товари за певний період не відпускалися, то для них не вказуватиметься нічого.
Рисунок 9 Перейдемо на закладку Об’єднання/Псевдоніми і вкажемо, що представлення елементу довідника матиме псевдонім Товар, а поле регістру – псевдонім Націнка. Рисунок 10 Перейдемо на закладку Порядок і вкажемо, що результат запиту повинен бути відсортованим за спаданням значення поля Націнка. Рисунок 11 На закладці Підсумки визначимо, що потрібно виводити загальні підсумки і вони повинні являти собою суму значень поля Націнка. Рисунок 12 На закладці Звіт скинемо прапорець Використовувати побудовник звіту Рисунок 13 Тепер перейдемо на закладку Вихідна форма. Вкажемо, що параметри ДатаКінця і ДатаПочатку будуть редагуватися в формі в полях вводу типу Дата. Крім того, перемістимо параметр ДатаКінця в кінець списку параметрів. Рисунок 14 Натиснемо ОК. Платформа сформує макет і форму звіту.
Відкрийте модуль звіту і проаналізуйте, як там формується запит.
Запустимо 1С в режимі налагодження і перевіримо, як працює наш звіт. Рисунок 15 Звіт ПерелікТоварів Звіт Перелік товарів буде містити інформацію про те, які товари і за якою ціною продає наше підприємство. На його прикладі ми познайомися з можливістю одержання останніх значень з періодичного регістру відомостей і виведення ієрархічних довідників. Створимо новий об’єкт конфігурації Звіт ПерелікТоварів. Перейдемо на закладку Макети і викличемо конструктор вихідної форми. Виберемо об’єктну таблицю довідника ДНоменклатура і віртуальну таблицю регістру відомостей ЦіниСрезПоследних. Викличемо діалог введення параметрів віртуальної таблиці ЦіниСрезПоследних і вкажемо, що період буде передаватися в параметрі ДатаЗвіту. Рисунок 16 Потім виберемо з таблиць такі поля: § ДНоменклатура.Родитель § ДНоменклатура.Ссылка § ЦіниСрезПоследних.Ціна Рисунок 17 Перейдемо на закладку Зв’язки, скинемо прапорець Всі біля таблиці регістру і встановимо його біля таблиці довідника.
На закладці Об’єднання/Псевдоніми вкажемо, що поле Родитель буде мати псевдонім ГрупаТоварів, а поле Ссылка – Товар. Рисунок 18 Перейдемо на закладку Підсумки і вкажемо, що групування відбуватиметься по полю ГрупаТоварів з типом підсумків Елементи та ієрархія, а значення підсумкових полів задавати не будемо. Рисунок 19 На закладці Звіт скинемо прапорець Використовувати побудовник звіту. На закладці Вихідна форма відмітимо, що тип параметру ДатаЗвіту – Дата.
Рисунок 20 Клацнемо по кнопці ОК. Відкрийте модуль звіту і проаналізуйте, як там формується запит.
Запустимо 1С в режимі налагодження і оглянемо сформований звіт. Рисунок 21 Звіт РейтингКлієнтів Звіт РейтингКлієнтів буде показувати прибуток підприємства від продажу товару кожному з клієнтів. На його прикладі ми продемонструємо можливість використання діаграми для відображення результату запиту. Створимо в конфігураторі новий об’єкт конфігурації звіт РейтингКлієнтів. Потім створимо основну форму звіту і розмістимо на ній поле вибору з іменем «ПолеВибору», підписом «Тип діаграми» і підказкою «Вибір типу діаграми», використовуючи з цієєю метою команди меню Форма|Вставити об’єкт управління… Рисунок 22 Потім розмістимо під ним діаграму з іменем Діаграма. Змінимо розміри поля вводу і областей діаграми, задамо текст області заголовку «Рейтинг клієнтів». Рисунок 23
В модулі форми створимо процедуру Сформувати з заготовкою для тексту запиту: Процедура Сформувати() Запрос=Новый Запрос; Запрос.Текст= ; КонецПроцедуры
Встановимо курсор в передостанньому рядку перед знаком ; і викличемо конструктор запиту Текст|Конструктор запиту… Рисунок 24 Виберемо віртуальну таблицю регістру накопичення Продажі.Обороти і з неї поля ПродажіОбороти.Клієнт та ПродажіОбороти.НацінкаОборот. Рисунок 25 На закладці Об’єднання/Псевдоніми вкажемо, що поле ПродажіОбороти.НацінкаОборот матиме псевдонім Прибуток. Рисунок 26 На закладці Порядок вкажемо, що рядки результату потрібно розмістити за спаданням поля Прибуток. Натиснемо ОК і подивимося, який текст сформував конструктор
Процедура Сформувати() Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | ПродажіОбороты.Клієнт, | ПродажіОбороты.НацінкаОборот КАК Прибуток |ИЗ | РегистрНакопления.Продажі.Обороты КАК ПродажіОбороты | |УПОРЯДОЧИТЬ ПО | Прибуток УБЫВ"; КонецПроцедуры
Тепер опрацюємо результат запиту таким чином, щоб дані відобразилися в діаграмі, розміщеній у формі звіту. Для цього додамо в процедуру такий фрагмент (змінені рядки виділені жирним шрифтом).
Процедура Сформувати() Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | ПродажіОбороты.Клієнт, | ПродажіОбороты.НацінкаОборот КАК Прибуток |ИЗ | РегистрНакопления.Продажі.Обороты КАК ПродажіОбороты | |УПОРЯДОЧИТЬ ПО | Прибуток УБЫВ"; ВыборкаРезультатаЗапроса=Запрос.Выполнить().Выбрать(); Діаграма=ЭлементыФормы.Діаграма; Діаграма.Обновление=Ложь; Діаграма.АвтоТранспонирование=Ложь; ТочкаДіаграми=Діаграма.УстановитьТочку("Прибуток"); Пока ВыборкаРезультатаЗапроса.Следующий() Цикл ПоточнаСеріяДіаграми= Діаграма.УстановитьСерию(ВыборкаРезультатаЗапроса.Клієнт); Діаграма.УстановитьЗначение(ТочкаДіаграми,ПоточнаСеріяДіаграми, ВыборкаРезультатаЗапроса.Прибуток); КонецЦикла; Діаграма.Обновление=Истина; Діаграма.АвтоТранспонирование=Истина; КонецПроцедуры
Тепер створимо обробник події форми При відкритті і додамо до нього встановлення значення поля вибору і типу діаграми, а також виклик нашої процедури Сформувати
Процедура ПриОткрытии()
//кінець списку поля вибору ПолеВибору=ТипДиаграммы.Гистограмма; ЭлементыФормы.Діаграма.ТипДиаграммы=ПолеВибору; Сформувати(); КонецПроцедуры В тілі процедури опишемо заповнення списку вибору для поля вибору
СписокВибору=ЭлементыФормы.ПолеВибору.СписокВыбора; СписокВибору.Добавить(ТипДиаграммы.График,"Графік"); СписокВибору.Добавить(ТипДиаграммы.Гистограмма,"Гістограма"); СписокВибору.Добавить(ТипДиаграммы.ГистограммаОбъемная,"Гістограма 3D"); СписокВибору.Добавить(ТипДиаграммы.ГистограммаГоризонтальная,"Гістограма горизонтальна"); СписокВибору.Добавить(ТипДиаграммы.ГистограммаГоризонтальнаяОбъемная,"Гістограма горизонтальна 3D"); СписокВибору.Добавить(ТипДиаграммы.Круговая,"Кругова"); СписокВибору.Добавить(ТипДиаграммы.КруговаяОбъемная,"Кругова 3D"); СписокВибору.Добавить(ТипДиаграммы.Изометрическая,"Ізометрична"); СписокВибору.Добавить(ТипДиаграммы.ИзометрическаяНепрерывная,"Ізометрична неперервна"); СписокВибору.Добавить(ТипДиаграммы.ИзометрическаяЛента,"Ізометрична стрічка"); СписокВибору.Добавить(ТипДиаграммы.ИзометрическаяПирамида,"Ізометрична піраміда");
На завершення створимо обробник події поля вибору При зміні і виконаємо в ньому встановлення типу діаграми.
Процедура ПолеВиборуПриИзменении(Элемент) // Вставити вміст обробника. ЭлементыФормы.Діаграма.ТипДиаграммы=ПолеВибору; КонецПроцедуры
Запустимо 1С в режимі налагодження і попрацюємо з новоствореним звітом, задаючи різні типи діаграми Рисунок 27
Рисунок 28 При створенні звіту ми розглянули загальний спосіб заповнення діаграми даними. Однак, якщо вихідні значення можуть бути одержані у вигляді таблиці значень чи області кліток табличного документу, то можна використати простіший спосіб заповнення діаграми даними з використанням властивості діаграми ИсточникДанных. Повернемося до модуля форми звіту, закоментуємо раніше створені рядки, якими ми додавали до діаграми дані і замінимо їх одним рядком: //ВыборкаРезультатаЗапроса=Запрос.Выполнить().Выбрать(); //Діаграма=ЭлементыФормы.Діаграма; //Діаграма.Обновление=Ложь; //Діаграма.АвтоТранспонирование=Ложь; //ТочкаДіаграми=Діаграма.УстановитьТочку("Прибуток"); //Пока ВыборкаРезультатаЗапроса.Следующий() Цикл //ПоточнаСеріяДіаграми=Діаграма.УстановитьСерию(ВыборкаРезультатаЗапроса.Клієнт); //Діаграма.УстановитьЗначение(ТочкаДіаграми,ПоточнаСеріяДіаграми, ВыборкаРезультатаЗапроса.Прибуток); //КонецЦикла; //Діаграма.Обновление=Истина; //Діаграма.АвтоТранспонирование=Истина; ЭлементыФормы.Діаграма.ИсточникДанных=Запрос.Выполнить().Выгрузить();
Запустимо 1С в режимі налагодження і перевіримо роботу звіту.
|