Діловий тижневик "КОНТРАКТИ" №48/2008 Гроші:
Причини і наслідки інфляційних процесів в Україні :: Хто ще потрібен і вже не потрібен роботодавцям :: Чому різко дешевшає комерційна нерухомість...
У минулому уроці було розглянуто фільтрацію результатів запиту. За допомогою речення ГДЕ задавали умови добору з початкових таблиць, щоб у запиті оброблялися тільки ті записи, для яких умова є істинною. Причому умова добору могла бути як простим, так і доволі складним логічним виразом. Мета такої обробки - максимально обмежити обсяг даних, які одержимо в результуючому наборі. Що далі робити з тією безліччю даних, обмежити які не вдалося, бо за всіма параметрами вони потрібні?
1. Навіщо групують дані?
Можливість мати у своєму розпорядженні всі дані в системі, без сумніву, - запорука ефективного керування. Однак, як ми вже переконалися, усі дані всіх таблиць бази даних користувачам не потрібні. Та й потрібні дані існують не просто так, а навіщось.
Але навіть цілком коректно з цією метою відібрані дані аналізувати складно: їх буде надто багато. Усі дані контролювати теж нереально, а керувати ними - просто неможливо. Недарма кажуть, що суть управлінського обліку зводиться до проблеми певного агрегування (групування) інформації.
Перша причина угруповання - зменшити кількість інформації, звівши її в однорідні групи. Наприклад, суми продажів і купівель зводяться в групи, якими служать бухгалтерські рахунки. Потім за цими вже зведеними показниками формуються більші показники - балансові групи, різні звітні показники. Однак менше, ніж рахунком, уже не оперують.
План рахунків змінювали не дуже давно не в останню чергу для того, щоб без додаткового розподілу одержувати прийняті в міжнародній практиці показники. Модні зараз різні системи ключових індикаторів теж є агрегованими показниками, як правило, досить високого рівня.
Друга причина - нормування показників. Стандартні показники (рентабельність, оборотність тощо) можна вимірювати (наприклад, у кількісному вираженні) і порівнювати з ними.
Третя причина - спрощення аналітичних задач за рахунок зниження розмірності. Якщо зафіксувати хоча б один вимір, складність знизиться на порядок. Наприклад, вибрати марку й аналізувати тільки речення всередині неї, хоча практично на конкурентних ринках доведеться аналізувати принаймні кілька марок.
Це не вичерпний перелік (є ще й гарне візуальне подання та ін.). Але зрозуміло, що групувати інформацію важливо і потрібно, і робити це можна у найрізноманітніші способи.
2. Що таке угруповання?
Угруповання - це процес обєднання в логічному порядку стовпчиків з повторюваними значеннями. На мал. 1 показано фрагмент таблиці товарів, що можуть бути згруповані за будь-яким полем. Наприклад, за кольором корпусу - поруч опиняться прилади в корпусах одного кольору, або за країною-виробником - тоді ми одержимо інше угруповання, де поруч будуть товари однієї країни. На малюнку блакитним кольором виділено товари в сріблястих корпусах; жовтим - товари виробництва Тайваню. Зрозуміло, це різні угруповання, і вони можуть і не перетинатися. Потрібного нам товару виробництва Тайваню може і не бути в сріблястому корпусі.
3. Як здійснюється угруповання?
Угруповання даних - це зрозумілий і технічно досить простий процес.
Початкові дані в запиті можуть бути згруповані за однаковим значенням полів, і до них можна застосувати різні агрегатні функції. Групуються записи, що містять однакові значення групувального поля. Припустімо, поле Родитель - і буде згруповано весь посуд, алкоголь і т.д., поле Цвет - і згруповано все продане за кольорами тощо).
Якщо застосувати ще й агрегатну функцію, результат поверне кількість наявних апаратів у сріблястих корпусах, у чорних корпусах і т. д. за всіма, що трапляються в групах, які визначатимуться кольором.
Для ілюстрації цього прикладу на малюнку 1 можна застосувати функцію КОЛИЧЕСТВО (Цветкорпуса). Рядки в результаті запиту будуть містити результат обчислення зазначених агрегатних функцій (СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ), розраховані (згруповані) за даними початкових стовпців.
Агрегатні функції вказують у списку полів вибірки в реченнях СГРУППИРОВАТЬ ПО, при цьому обовязково вказати список полів, за якими потрібно проводити угруповання. Якщо зовсім не вказати угруповання, за замовчуванням буде одне число (для текстових полів - кількість, для числових - сума всіх записів).
4. Місце в запиті речення СГРУППИРОВАТЬ ПО
Щоб створювати запити, треба знати, куди потрапляють візуально зазначені вами параметри при трансляції їх конструктором. Ось місце речення СГРУППИРОВАТЬ ПО серед інших речень запиту.
Як бачимо, воно йде після речення ГДЕ і перед реченням УПОРЯДОЧИТЬ (якщо такі є в запиті).
5. Приклад створення запиту з угрупованням за допомогою конструктора запитів «1С:Підприємства 8.0»
За допомогою запиту, створюваного конструктором, ми хочемо вибрати назву проданих за певний період товарів, виторг і прибуток від їх продажу, згрупувати їх за товарними групами й одержати суму виторгу і середній прибуток за кожною товарною групою.
Скористаємося запитом, який ми вже створили. Нижче наведено його текст (блок у зеленій рамці), який ми вже написали, і змінювати його не будемо. Копію попереднього запиту можна зробити у вікні Сервис - Консоль Отчетов, користаючись інструментами верхньої панелі, і викликати на редагування допомогою кнопки F2.
Конструктор запитів викликається за допомогою кнопки на нижній панелі інструментів вікна редагування запиту.
Ще раз повернімося до тієї частини тексту, яку ми вже створили. Ми вибрали поля з назвою проданої номенклатури, суму продажу (назвали її виторгом). Скористалися з можливості одержати відразу результат обчислення полів, що містять виторг і собівартість (назвали цю різницю прибутком). Усе це зроблено за допомогою закладок Таблицы и поля, Псевдонимы конструктора запитів «1С:Підприємства». Вибір полів зроблено з таблиць довідника «Номенклатура» і регістру накопичення продажу компанії.
На закладці Связи встановлено обєднання таблиць. Звичайно, для цього запиту ми могли б обійтися й однією таблицею, якби віддали перевагу іншому угрупованню. Але оскільки завдання передбачає поділ товарів за групами, а відомості про належність до групи (тобто про поле Родитель) містяться в таблиці самого довідника, але не регістру накопичення, доводиться обєднувати таблиці. Період вибірки ми задавали через передачу параметрів віртуальної таблиці (це одна з важливих особливостей конструктора щодо обмеження вибірки, яку ми теж розглядали).
Тепер можемо розпочинати угруповання. Для цього використовуються закладки Группировки і Итоги.
На закладці Группировки ми вибираємо поле, за яким будемо групувати, - за полем Родитель (мал. 2). нші поля (текст запиту в блакитній рамці) із представленням елементів поставить конструктор. нижче в Суммируемом поле (мал. 3) ми поставимо агрегатні функції, значення яких нам потрібні - суму виторгу у групі і середній прибуток за продажами.
Що тут важливо? Те, що групувати можна тільки за полями, що зазначені в списку вибірки. Це цілком логічно: якщо значення поля не вибрані, вони невідомі, і не можна здійснити угруповання. Якщо ж ми хочемо накласти згодом умову на значення групувального поля реченням ИМЕЮЩИЕ (наприклад, порахували середню оборотність і вибрали тільки ті групи, за якими цей показник нижчий від норми), обовязково повинні бути угруповання за такими полями. Цієї умови слід дотримуватися, навіть якщо не треба бачити ці поля в підсумках.
Це теж зрозуміло: спочатку треба згрупувати і розрахувати, а тільки потім можна побачити, чи відповідає результат якимось умовам. Повідомлення про такі помилки ви одержите під час перевірки запиту, але краще відразу мати це на увазі.
Тепер перейдімо до закладки Итоги. Тут ми зазначимо групувальні поля, які хочемо бачити в підсумках (мал. 4). У цьому випадку це теж поле Родитель. Коли як одне з джерел даних зазначена таблиця довідника, дуже часто одним з угруповань буде його ієрархія.
Далі зазначаються агрегатні функції, значення яких треба одержати, - а ми хочемо знати суму виторгу у групі і середній прибуток (мал. 5). Як параметри цієї закладки перетворено в текст запиту, видно в жовтому блоці тексту запиту.
На закладці Порядок ми задали сортування за полем Выручка за убуванням. Зазвичай, коли нас цікавлять якісь показники, більш вдалим буває сортування за числовими полями. Якщо цього не зробити, буде прийнято сортування першої з обєднаних таблиць (а це таблиця довідника «Номенклатура»). Найменування товарів будуть відсортовані за алфавітом.
Скрізь у підсумках, угрупованнях і сортуваннях, якщо ми кваліфікували стовпчики (дали їм псевдоніми - товар, выручка, прибыль), можна використовувати кваліфіковані імена. Тепер можна натиснути кнопку ОК у конструкторі - буде виконано синтаксичну перевірку, і якщо все нормально, можна виконати запит.
Якщо ми хочемо накласти умову на групи, слід накласти умови на значення агрегатних функцій групувальних полів за допомогою речення ИМЕЮЩИЕ (йде безпосередньо за реченням СГРУППИРОВАТЬ). Наприклад, ИМЕЮЩИЕ СРЕДНЕЕ (Прибыль) > 500 - і в наборі не буде жодної групи, у якій середній прибуток по групі не досяг 500,01 грн.
На малюнку 6 показано те, що в нас вийшло в підсумку (фрагмент таблиці, зробленої за даними демонстраційної версії конфігурації «Керування торгівлею для України 8.0» ред. 2.1, щоб можна відтворити результати).
Запит такої складності вже цілком придатний для роботи. Мало того, якщо додати сюди ще одне поле - рентабельність товарних запасів (прибуток, поділений на середньоденний залишок товарів за період), у таблицю будуть включені основні показники, з якими працюють менеджери з керування запасами. Для цього в запит потрібно додати ще таблицю «ОстаткиТоваровКомпании», зєднати таблиці і знову пройти всі закладки.
ВЫБРАТЬ <поля1,поля2>
ИЗ<таблица1,таблица2>
ГДЕ<условия>
СГРУППИРОВАТЬ ПО <поля1,поля2>
УПОРЯДОЧИТЬ ПО <поля1, поля2>
ИТОГИ <фукция1,функция2>
ПО <поле1,поля2>
ВЫБРАТЬ
СпрНоменклатура.Ссылка КАК Товар,
СпрНоменклатура.Предста-вление,
ПродажиКомпанииОбороты. СуммаПродажиОборот
КАК Выручка,
ПродажиКомпанииОборо-ты.СуммаПродажиОборот ПродажиКомпанииОбороты. СебестоимостьОборот КАК Прибыль
ПО ПродажиКомпанииОбо-роты.Номенклатура = СпрНоменклатура.
Ссылка
СГРУППИРОВАТЬ ПО
СпрНоменклатура.Родитель,
СпрНоменклатура.Ссылка,
СпрНоменклатура.Представ-ление
УПОРЯДОЧИТЬ ПО
Выручка УБЫВ
ИТОГИ СУММА(Выручка), СРЕДНЕЕ(Прибыль)
ПО ОБЩИЕ,
СпрНоменклатура.Родитель
Відповіді на запитання користувачів «1с»
Чи можна заповнити відвантаження в табличній частині податкової накладної пропорційно частковому платежу?
Для цього можна скористатися кнопкою Заполнить в екранній формі документа. Таблична частина при цьому буде заповнена товарами з документа-підстави. Склад номенклатури після цього коригується вручну, пропорційно платежу. Цілком автоматичного заповнення зробити не можна.
Як у конфігурації відобразити пільги з ПДВ у податковій накладній?
Зазначити пільгу з ПДВ можна в довіднику «Номенклатура» для товарів, які завжди продаються без ПДВ, або для окремої податкової накладної. Список пільг зберігається в довіднику «Налоги и отчисления» у групі «Льготы по НДС», ви можете його доповнювати. Пільги використовуються для ставки «без ПДВ» і в друкованій формі коректно відображаються у графі 10 розділів I і IV. Можливість зявилася починаючи з релізу 2.5, на сьогодні діє реліз 2.54.
«1С» до здавання готова Вікно у світ «1С» Електронна звітність у «1C: Підприємство 7.7». Уже ніхто не сумнівається, що електронне подання звітності вигідне обом сторонам: і тій, що подає, і тій, що приймає. Тепер перед податковими органами поставлено завдання максимально автоматизувати процес при...