Інтернет Windows Android

СКД передача значення у відборі. Використання відборів в скд

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

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

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

ВИБРАТИ

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

наприклад:

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

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

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

ДЕ

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

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

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

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

Для вирішення завдання можна скласти запит з'єднує лівим з'єднанням номенклатуру і таблицю оборотів Продажі, в результаті, для номенклатури, що не продавалася в обраному періоді ми отримаємо значення полів контрагент, договір, кількість, сума \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 Новий ІсточнікДоступнихНастроекКомпоновкіДанних (Макет); Компоновщік.Ініціалізіровать (ІсточнікДоступнихНастроек); Компоновщік.ЗагрузітьНастройкі (Макет.НастройкіПоУмолчанію); КонецПроцедури

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

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

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