СКД передача значення у відборі. Використання відборів в скд
Розширення мови запитів для системи компоновки даних
Розширення мови запитів для системи компоновки даних здійснюється за допомогою спеціальних синтаксичних інструкцій, що укладаються в фігурні дужки і які розміщені безпосередньо в текст запиту.
Синтаксичні елементи розширення мови запитів системи компоновки даних
ВИБРАТИ
У цій пропозиції описуються поля, які користувач зможе вибирати для виведення. після цього ключового слова через кому перераховуються псевдоніми полів з основного списку вибірки запиту, які будуть доступними для настройки.
наприклад:
(ВИБРАТИ Номенклатура, Склад)
Після псевдоніма поля може перебувати комбінація символів «. *», Що позначає можливість використання дочірніх полів від даного поля.
Наприклад, запис Номенклатура. * Позначає можливість використання дочірніх полів поля «Номенклатура» (наприклад, поля «Номенклатура.Код»). Елемент ВИБРАТИ може бути присутнім тільки в першому запиті об'єднання.
ДЕ
Описуються поля, на які користувач зможе накладати відбір. В даному реченні використовуються поля таблиць. Використання псевдонімів полів списку вибірки неприпустимо. Кожна частина об'єднання може містити власний елемент ДЕ.
(ДЕ Номенклатура. *, Склад)
нехитрий приклад
Необхідно отримати продажу за період + вивести всю номенклатуру, незалежно від того чи були продажу чи ні. Тобто, необхідно вибрати дані з таблиці оборотів регістра Продажі, дані з довідника номенклатура. Опустимо питання навіщо нам потрібна вся номенклатура.
Для вирішення завдання можна скласти запит з'єднує лівим з'єднанням номенклатуру і таблицю оборотів Продажі, в результаті, для номенклатури, що не продавалася в обраному періоді ми отримаємо значення полів контрагент, договір, кількість, сума \u003d Null. Такий запит:
ВИБРАТИ СпрНоменклатура.Ссилка ЯК Номенклатура, ПродажіОбороти.Контрагент, ПродажіОбороти.ДоговорКонтрагента, ПродажіОбороти.КолічествоОборот ЯК Кількість, ПродажіОбороти.СтоімостьОборот ЯК Вартість ІЗ Справочнік.Номенклатура ЯК СпрНоменклатура ЛІВЕ З'ЄДНАННЯ РегістрНакопленія.Продажі.Обороти ЯК ПродажіОбороти ПО СпрНоменклатура.Ссилка \u003d ПродажіОбороти.НоменклатураОсь результат:
контрагент | договір | номенклатура | кількість | сума |
null | null | _Тест1 | null | null |
ТОВ "Роги і копита" | договор1 | Капці | 10 | 1200 |
ВАТ "Газпром" | кльовий договір | чоботи | 5 | 13000 |
null | null | калоші | null | null |
null | null | сланці | null | null |
В даному прикладі не було продажів номенклатури: "Калоші" і "Сланці"
І все б нічого, якщо ми згрупуємо вибірку по контрагенту то вся не продавати номенклатура потрапить в окреме угруповання, де Контрагент \u003d Null, але клієнт хоче мати в звіті довільний відбір по полю контрагент (природно мається на увазі контрагент з регістра Продажі). Як бути? Адже по суті нам потрібно фільтрувати тільки таблицю продажі. Якщо ми використовуємо автозаповнення в конструкторі СКД, то в доступні поля відбору потрапить поле контрагент, Все начебто добре, але при виконанні звіту з відбором по контрагенту ми втратимо все записи з з'єднання з номенклатурою. Наприклад, встановимо відбір: контрагент \u003d ТОВ "Роги і копита". Результат буде виглядати так:
Зовсім не те що нам потрібно, правда?
Для вирішення завдання можна звичайно додати параметр в запит, наприклад в параметри віртуальної таблиці ПродажіОбороти, Але при цьому втрачається гнучкість настройки виду порівняння.
Рішення є: для цього в конструкторі запитів на вкладці компонування даних => таблиці додамо поле-умова в умови віртуальної таблиці ПродажіОбороти і змінимо йому псевдонім на КонтрагентОтбор
Для того щоб не плутати користувача з полями відбору, відключимо поле-умова контрагент і змінимо заголовок для поля КонтрагентОтбор
В результаті виконання даної схеми з включеним відбором по полю контрагент результуючий запит набуде вигляду:
ВИБРАТИ СпрНоменклатура.Ссилка ЯК Номенклатура, ПродажіОбороти.Контрагент ЯК Контрагент, ПродажіОбороти.ДоговорКонтрагента ЯК ДоговорКонтрагента, ПродажіОбороти.КолічествоОборот ЯК\u003e Кількість, ПродажіОбороти.СтоімостьОборот ЯК Вартість, ПРЕДСТАВЛЕНІЕССИЛКІ (ПродажіОбороти.ДоговорКонтрагента) ЯК ДоговорКонтрагентаПредставленіе, ПРЕДСТАВЛЕНІЕССИЛКІ (ПродажіОбороти.Контрагент) ЯК КонтрагентПредставленіе, СпрНоменклатура.Представленіе ЯК НоменклатураПредставленіе З Справочнік.Номенклатура ЯК СпрНоменклатура ЛІВЕ З'ЄДНАННЯ РегістрНакопленія.Продажі.Обороти (& П,,, Контрагент \u003d & П3) ЯК ПродажіОбороти ПО СпрНоменклатура.Ссилка \u003d ПродажіОбороти.НоменклатураІ відповідно результат:
контрагент | договір | номенклатура | кількість | сума |
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-файлів
Для чого може застосовуватися СКД?
Усталена думка - для звітів.
Насправді можливості СКД виходять за рамки побудови універсальних звітів.
І сьогодні ми покажемо, як за допомогою СКД користувач зможе настроювати гнучкий відбір даних. Далі цей відбір буде використовуватися при отриманні і обробці даних.
Для яких завдань це буде корисно?
Наведемо приклади з типових конфігурацій:
- Обробка «Вивантаження даних на сайт"
- Формування прайс-листа
- Вивантаження даних в ТСД (термінал збору даних)
- Сегментування товарів, партнерів
- Формування замовлень (клієнтів, постачальників) за потребами
- Планування ремонтів в 1C: ERP.
Тобто інструмент корисний всюди, де потрібно надати користувачеві широкі можливості відбору.
Створення довільного відбору в керованої формі з використанням СКД
В уроці розглянута робота з компоновщиком налаштувань схеми компонування даних:
- Висновок відбору на форму
- Програмна зв'язок компоновщика налаштувань і схеми компонування
- Створення відборів за замовчуванням в СКД.
Отримання даних з бази з фільтрацією по відбору СКД
У відео показано, як можна вибрати дані за допомогою раніше встановленого відбору в компонувальнику налаштувань.
Використовується "страшний" об'єкт - ПроцессорВиводаРезультатаКомпоновкіДаннихВКоллекціюЗначеній.
Насправді, не все так складно - за 8 хвилин ми вирішуємо поставлену задачу.
Зберігання відборів СКД в інформаційній базі
В уроці розглянемо збереження налаштувань компоновщика СКД за допомогою Сховища значень.
Розбираємося, як вирішити цю задачу в конфігурації "1С: Управління виробничим підприємством 1.3".
Приємного перегляду! :)
Взагалі, СКД надає масу можливостей.
Ось кілька "фішечек", які ми навіть не встигли описати на сторінці курсу.
Якщо потрібно зібрати дані з різних джерел, Є три варіанти.
Можна намагатися складати один "універсальний" запит для всіх даних (довго), можна в циклі виводити дані кількох запитів (жорстка, негнучка структура) - а можна просто задіяти СКД і з'єднання наборів даних замість одного запиту.
При цьому важливо отримати коректні підсумки - в цьому є особливості, якщо джерел декілька
За допомогою СКД можна просто отримати зріз останніх на кожну дату в звіті.
Або, для наочності, - отримати ціну товару на кожну дату продажу.
За допомогою СКД можна організувати висновок до звіту всіх дат за період, А не тільки тих, на які були дані в звіті (додаток дат без програмування, тільки можливостями СКД)
За допомогою СКД можна організувати вкладені угруповання з доповненням періодів (рік / квартал / місяць і т.д.)
Довільно оформити звіт, наприклад, вивести заголовок колонки вертикально, а дані в цій колонці - горизонтально.
Дати користувачу самому вибирати періодичність, з якою дані будуть виводитися в звіт (по роках, по кварталах, по місяцях) - виключно настройками, без редагування модуля звіту.
Як в звіті з'єднати кілька умов по АБО? Такої можливості, наприклад, в построителе звіту немає - але є в СКД
Якщо Ви виводите зведені дані у вигляді діаграми, потрібно вміти точно управляти зовнішнім її видом: видимістю маркерів для серії, чергуванням квітів серій графіка, відокремлювати на графіку вертикальною лінією минулі дані від майбутніх і т.п.
Безумовно, тут є і нюанси, на які потрібно звертати увагу
При створенні звіту розробник налагодив текст запиту, але при використанні цього запиту в звіті на СКД система видає невірний результат.
Тому важливо вміти отримати запит, який насправді виконує система для отримання даних з бази, і налагодити такий запит.
При додаванні до звіту деталізації до документа-реєстратора система іноді видає "некоректні" початкові і кінцеві залишки.
Тому важливо коректно налаштувати поля в звіті на СКД, щоб залишки виводилися коректно і з деталізацією до документа, і без неї.
Результат звіту може змінитися в залежності від того, де налаштований відбір за значенням ресурсу - на рівні звіту і на рівні окремої угрупування, за цим потрібно стежити.
Якщо ви хочете професійно освоїти СКД і щодня застосовувати в своїй роботі, Записуйтеся на курс:
підтримка - 2 місяці. Обсяг курсу - 34 навчальних години.
Не відкладайте своє навчання!
Нерідко програмістам для написання обробок доводилося використовувати запити для отримання даних і подальшої їх обробці. Дані в свою чергу, виходили із запиту. Ну а запит без відбору або фільтра це рідкість. Поговоримо про відборах в таких запитах, на прикладі запиту:
Для того, щоб організувати відбір по контрагенту для користувача в звичайній формі, програмісту доводилося розміщувати три елементи на формі, що виглядало приблизно так:
Скільки праць варто описати програмісту різні види порівняння (дорівнює, не дорівнює, в списку, в групі ...) і виходячи з цих видів порівняння допрацьовувати свій кінцевий запит отримання даних.
Розглянемо, як це можна зробити за допомогою СКД. Створимо в нашій обробці Макет з типом Схема компонування даних і заповнимо його нашим запитом:
На вкладці Налаштування додамо нову угруповання без деталізації і, в нашому прикладі, поле Контрагент, так як в результаті ми отримаємо всі в таблицю значень:
І на вкладці Відбір додамо в відбір Контрагента:
Тепер займемося оформленням форми. Виведемо на форму самої обробки Відбір, з яким буде працювати користувач. На форму виведемо елемент типу Табличное поле і дамо йому ім'я Відбір з типом даних Компоновщік.Настройкі.Отбор:
Тепер створимо оброблювачі подій форми прочинені і обробник натискання кнопки Виконати, код представлений нижче:
Перем Макет; Процедура КнопкаВиполнітьНажатіе (Кнопка) Результат.Очістіть (); КомпоновщікМакета \u003d Новий КомпоновщікМакетаКомпоновкіДанних; МакетКомпоновкі \u003d КомпоновщікМакета.Виполніть (Макет, Компоновщік.ПолучітьНастройкі (), Тип ( "ГенераторМакетаКомпоновкіДаннихДляКоллекцііЗначеній")); ПроцессорКомпоновкі \u003d Новий ПроцессорКомпоновкіДанних; ПроцессорКомпоновкі.Ініціалізіровать (МакетКомпоновкі); ПроцессорВивода \u003d Новий ПроцессорВиводаРезультатаКомпоновкіДаннихВКоллекціюЗначеній; ПроцессорВивода.УстановітьОб'ект (Результат); ПроцессорВивода.Вивесті (ПроцессорКомпоновкі); Якщо ЕлементиФорми.Результат.Колонкі.Колічество () \u003d 0 Тоді ЕлементиФорми.Результат.СоздатьКолонкі (); КонецЕсли; КонецПроцедури Процедура відкриття () Макет \u003d ПолучітьМакет ( "Макет"); ІсточнікДоступнихНастроек \u003d Новий ІсточнікДоступнихНастроекКомпоновкіДанних (Макет); Компоновщік.Ініціалізіровать (ІсточнікДоступнихНастроек); Компоновщік.ЗагрузітьНастройкі (Макет.НастройкіПоУмолчанію); КонецПроцедури
Обробка готова, запустивши її, можна при запуску відразу побачити в нашому відборі з'явився Контрагента, у якого можна вибирати будь-який тип порівняння, а також і додавати додаткові рядки відбору за реквізитами довідника Контрагенти:
На цьому все, сподіваюся, ця стаття допоможе Вам поліпшити гнучкість відборів в Ваших обробках.
Кононов Сергій