СКД як для звітів – реалізація універсальних відборів. Використання відборів у Скд Як зробити відбори без Скд

Нерідко програмістам для написання обробок доводилося використовувати запити для отримання даних та подальшої обробки. Дані, у свою чергу, виходили із запиту. Ну а запит без відбору чи фільтра – це рідкість. Поговоримо про відбори у таких запитах, на прикладі запиту:

Для того, щоб організувати відбір за контрагентом для користувача у звичайній формі, програмісту доводилося розміщувати три елементи на формі, що виглядало приблизно так:

Скільки праць варто описати програмісту різні види порівняння (одночасно, не однаково, у списку, у групі…) і з цих видів порівняння доопрацьовувати свій кінцевий запит отримання даних.

Розглянемо, як це можна зробити за допомогою СКД. Створимо в нашій обробці Макет з типом Схема компонування даних та заповнимо його нашим запитом:

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

І на вкладці Відбір додамо у відбір Контрагента:

Тепер візьмемося оформленням форми. Виведемо на форму самої обробки Відбір, з яким працюватиме користувач. На форму виведемо елемент типу Табличне поле і дамо йому ім'я Відбір з типом даних Компонувальник. Налаштування.

Тепер створимо обробники подій форми При Відкритті та обробник натискання кнопки Виконати, код представлений нижче:

Перем Макет; Процедура КнопкаВиконатиНатискання(Кнопка) Результат.Очистити(); КомпонувальникМакета = Новий КомпонувальникМакетаКомпонуванняДаних; МакетКомпонування = КомпонувальникМакета.Виконати(Макет, Компонувальник.ОтриматиНалаштування(), Тип("ГенераторМакетаКомпонуванняДанихДляКолекціїЗначень")); ПроцесорКомпонування = Новий ПроцесорКомпонуванняДаних; ПроцесорКомпонування.Ініціалізувати(МакетКомпонування); ПроцесорВиводу = Новий ПроцесорВиводуРезультатуКомпонуванняДанихВКолекціюЗначень; ПроцесорВиводу.УстановитьОбъект(Результат); Процесор Виводу.Вивести(ПроцесорКомпонування); Якщо ЕлементиФорми.Результат.Колонки.Кількість() = 0 Тоді ЕлементиФорми.Результат.СтворитиКолонки(); КінецьЯкщо; КінецьПроцедури Процедура ПриВідкритті() Макет = ОтриматиМакет("Макет"); ДжерелоДоступнихНалаштувань = Нове ДжерелоДоступнихНалаштуваньКомпонуванняДаних(Макет); Компонувальник.Ініціалізувати(ДжерелоДоступнихНалаштувань); Компонувальник.ЗавантажитиНалаштування(Макет.НалаштуванняЗа замовчуванням); КінецьПроцедури

Обробка готова, запустивши її, можна при запуску відразу побачити в нашому Відборі Контрагента, що з'явився, у якого можна вибирати будь-який тип порівняння, а також і додавати додаткові рядки відбору за реквізитами довідника Контрагенти:

На цьому все, сподіваюся, ця стаття допоможе Вам покращити гнучкість відборів у Ваших обробках.

Кононов Сергій

Навіщо може застосовуватися СКД?

Усталена думка – для звітів.

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

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

Для яких цілей це буде корисно?

Наведемо приклади з типових конфігурацій:

  • Обробка «Вивантаження даних на сайт»
  • Формування прайс-листа
  • Вивантаження даних у ТСД (термінал збору даних)
  • Сегментування товарів, партнерів
  • Формування замовлень (клієнтів, постачальників) за потребами
  • Планування ремонтів у 1C:ERP.

Тобто, інструмент корисний скрізь, де потрібно надати користувачеві широкі можливості відбору.

Створення довільного відбору у керованій формі з використанням СКД

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

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

Отримання даних із бази з фільтрацією щодо відбору СКД

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

Використовується "страшний" об'єкт - ПроцесорВиводуРезультатуКомпонуванняДанихВКолекціюЗначень.

Насправді не все так складно – за 8 хвилин ми вирішуємо поставлене завдання.

Зберігання відборів СКД в інформаційній базі

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

Розбираємося, як вирішити це завдання зміни “1С:Управління виробничим підприємством 1.3”.

Приємного перегляду! :)

Взагалі, СКД надає багато можливостей.

Ось кілька фішечок, які ми навіть не встигли описати на сторінці курсу.

Якщо потрібно зібрати дані з різних джерел, Є три варіанти.

Можна намагатися складати один "універсальний" запит для всіх даних (довго), можна в циклі виводити дані кількох запитів (жорстка, негнучка структура) - а можна просто задіяти СКД та з'єднання наборів данихзамість одного запиту.

При цьому важливо отримати коректні підсумки – у цьому є особливості, якщо джерела кілька

За допомогою СКД можна просто отримати зріз останніх на кожну дату у звіті.

Або, для наочності, – отримати ціну товару на кожну дату продажу.

За допомогою СКД можна організувати виведення до звіту всіх дат за період, а не лише тих, на які були дані у звіті (доповнення дат без програмування, лише можливостями СКД)

За допомогою СКД можна організувати вкладені угруповання з доповненням періодів (рік/квартал/місяць тощо)

Довільно оформити звіт, наприклад, вивести заголовок колонки вертикально, а дані у цій колонці горизонтально.

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

Як у звіті поєднати кілька умов щодо АБО? Такої можливості, наприклад, у будівельнику звіту немає – але є у СКД

Якщо Ви виводите зведені дані у вигляді діаграми, потрібно вміти точно керувати зовнішнім виглядом: видимістю маркерів для серії, чергуванням кольорів серій графіка, відокремлювати на графіку вертикальною лінією минулі дані від майбутніх і т.п.

Безперечно, тут є й нюанси, на які потрібно звертати увагу

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

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

При додаванні до звіту деталізації до документа-реєстратора система іноді видає “некоректні” початкові та кінцеві залишки.

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

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

Якщо ви хочете професійно освоїти СКДта щодня застосовувати у своїй роботі, записуйтесь на курс:

Підтримка – 2 місяці. Обсяг курсу – 34 навчальні години.

Чи не відкладайте своє навчання!

Розширення мови запитів для системи компонування даних

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

Синтаксичні елементи розширення мови запитів системи компонування даних

ВИБРАТИ

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

Наприклад:

(ВИБРАТИ Номенклатура, Склад)

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

Наприклад, запис Номенклатура* позначає можливість використання дочірніх полів поля «Номенклатура» (наприклад, поля «Номенклатура.Код»). Елемент ВИБРАТИ може бути лише у першому запиті об'єднання.

ДЕ

Описуються поля, куди користувач зможе накладати відбір. У цій пропозиції використовуються поля таблиць. Використання псевдонімів полів списку вибірки є неприпустимим. Кожна частина об'єднання може містити власний елемент ДЕ.

(ДЕ Номенклатура.*, Склад)

Нехитрий приклад

Необхідно отримати продаж за період + вивести всю номенклатуру, незалежно від того чи були продажі чи ні. Тобто необхідно вибрати дані з таблиці оборотів регістру Продажу, дані з довідника номенклатура. Опустимо питання навіщо нам потрібна вся номенклатура.

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

ВИБРАТИ СПРНоменклатура.Посилання ЯК Номенклатура, Продаж Обороти. бороти ЯК ПродажіОбороти ПО СпрНоменклатура.Посилання = ПродажіОбороти.Номенклатура

Ось результат:

Контрагент Договір Номенклатура Кількість Сума
null null _Тест1 null null
ТОВ "Роги та копита" Договір1 Капці 10 1200
ВАТ "Газпром" Кльовий договір Чоботи 5 13000
null null Галоші null null
null null Сланці null null

У даному прикладі не було продажу номенклатури: "Галоші" та "Сланці"

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

Зовсім не те, що нам потрібно, правда?

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

Рішення є: для цього в конструктори запитівна вкладці Компонування даних => Таблицідодамо поле-умову до умов віртуальної таблиці ПродажіОборотиі змінимо йому псевдонім на КонтрагентВідбір

Для того, щоб не плутати користувача з полями відбору, відключимо поле-умову Контрагенті змінимо заголовок для поля КонтрагентВідбір


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

ВИБРАТИ СПРНоменклатура.Посилання ЯК Номенклатура, ПродажіОбороти.Контрагент ЯК Контрагент, ПродажіОбороти.ДоговірКонтрагенту ЯК ДоговірКонтрагенту, ПродажіОбороти.КількістьОборот ЯК >Кількість, ПродажіОбороти.ВартістьОборотЯК Вартість ) ЯК ДоговірКонтрагентаПодання, ПРЕДСТАВЛЕННЯПОСИЛКИ(ПродажіОбороти.Контрагент) ЯК КонтрагентПодання, СпрНоменклатура.Представление ЯК НоменклатураПредставлення З Довідник.Номенклатура ЯК СпрНоменклатура ЛІВОЕ З'ЄДНАННЯ РегістрНакопичення.Продажі.Обороти(&П , , , Контрагент = &П3 ) ЯК ПродажіОбороти ПОіСНН.

І відповідно результат:

Контрагент Договір Номенклатура Кількість Сума
null null _Тест1 null null
ТОВ "Роги та копита" Договір1 Капці 10 1200
null null Чоботи null null
null null Галоші null null
null null Сланці null null

Тест1 – це група у довіднику Номенклатура, в якій усе лежить

До публікації прикріплена схема XML-схеми звіту, що використовувався в публікації. Схему створював у Комплексній автоматизації, але думаю, все чудово працюватиме і в УПП і в УТ 10

Підбиття підсумків

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

Якщо ви маєте достатньо досвіду, щоб створювати схеми без використання Автозаповнення- то ця порада не має сенсу.

Софт, що використовувався

  • Програма створення скріншотівSnimOK!
  • Редактор файлів XML