Інтернет Windows Android

1с 8 скд призначені для користувача настройки. Відбори в звітах

Ми досить детально розглянули настройки звітів, реалізованих на базі СКД. Тепер розберемо більш тонкі і детальні настройки варіантів звіту. Вікно «просунутих» налаштувань варіанту звіту викликається по команді «Ще» - «Інше» - «Змінити варіант звіту».

Вікно зміни варіанту звіту розділене на дві частини:

1. Структура звіту.

2. Налаштування звіту.


Розділ структури варіанту звіту аналогічний вкладці «Структура» стандартних налаштувань звіту. Призначення і настройка угруповань докладно розглянута в ч. 1 статті.

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

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

Розділ налаштувань складається з наступних вкладок:

1. Параметри. Містить параметри СКД, доступні користувачеві.

Параметр СКД - деяке значення, що використовується для отримання даних звіту. Це може бути значення умови для відбору або перевірки даних, а також допоміжне значення.


Таблиця параметрів представлена \u200b\u200bв форматі «Параметр» - «Значення». При необхідності можна змінювати значення параметрів. Натискання на кнопку «Властивості елемента налаштувань» відкриває для користувача настройки елемента.


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

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

2. Призначені для користувача поля. Містить поля, які формує сам користувач на підставі даних, які обирають звітом.


Користувач може додати два види полів:

  • Нове поле вибір ...
  • Нове поле вираз ...

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


Наприклад, обчислимо оцінку кількості продажів. Будемо вважати, що, якщо продано менше 10 одиниць товару, продали мало, а якщо більше 10 одиниць - багато. Для цього задамо 2 значення обчислюваного поля: перше буде з відбором «Кількість товарів Менше або дорівнює" 10 "», друге з відбором «Кількість товарів Більше" 10 "».

Поля вирази дозволяють обчислювати значення використовуючи довільні алгоритми. У них можуть використовуватися функції мови запитів і вбудованої мови програмування 1С. Вікно редагування поля вираження містить два поля для виразів детальних і підсумкових записів. Підсумкові записи - це угруповання, налаштовані в області «Структура звіту», в них необхідно використовувати агрегатні функції ( «Сума», «Мінімум», «Максимум», «Кількість»).

Наприклад, обчислимо середній відсоток знижки. Середній відсоток знижки розраховується за формулою: [Сума продажів без знижки] - [Сума продажів зі знижкою] / [Сума продажів без знижки]. Необхідно пам'ятати, що сума продажів без знижки може бути нульовою, тому використовуємо оператор ВИБІР для перевірки. Отримаємо наступні вирази:

· Для детальних записів:

вибір

Коли [Сума продажів без знижки] \u003d 0

тоді 0

Інакше [Сума продажів без знижки] - [Сума продажів зі знижкою] / [Сума продажів без знижки]

кінець

· Для підсумкових записів:

вибір

Коли Сума ([Сума продажів без знижки]) \u003d 0

тоді 0

Інакше Сума ([Сума продажів без знижки]) - Сума ([Сума продажів зі знижкою]) / Сума ([Сума продажів без знижки])

кінець

Як було сказано раніше, в вираженні підсумкових записів використовуємо агрегатную функцію «Сума».

3. группіруемих поля. Містить поля, за якими буде групуватися результат варіанту звіту. Групуються поля налаштовуються окремо для кожної з угруповань, але можна задати загальні групуються поля для варіанту звіту, якщо вибрати в дереві структури корінь «Звіт». Можна додати поле з результату звіту, призначене для користувача поле або вибрати авто поле, тоді система підбере поля автоматично. Також дана вкладка дозволяє змінювати порядок проходження группіруемих полів.


4. Поля. Містить поля, які будуть виведені в результат варіанту звіту. Поля налаштовуються окремо для кожної з угруповань, але можна задати загальні поля для варіанту звіту, якщо вибрати в дереві структури корінь «Звіт». Можна додати поле з результату звіту, призначене для користувача поле або вибрати авто поле, тоді система підбере поля автоматично. Також дана вкладка дозволяє змінювати порядок проходження полів.

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

  • Авто - система має поля автоматично;
  • Горизонтально - поля розташовуються горизонтально;
  • Вертикально - поля розташовуються вертикально;
  • В окремій колонці - поля розташовуються в різних колонках;
  • Разом - поля розташовуються в одній колонці.


5. Відбір. Містить відбори, використовувані в варіанті звіту. Налаштування відборів була докладно розглянута в частині 1 цієї статті. Відбори налаштовуються окремо для кожної з угруповань, але можна задати загальні відбори для варіанту звіту, якщо вибрати в дереві структури корінь «Звіт».


6. Сортування. Містить поля сортування, використовувані в варіанті звіту. Налаштування полів сортування була докладно розглянута в частині 1 цієї статті. Сортування налаштовуються окремо для кожної з угруповань, але можна задати загальні поля сортування для варіанту звіту, якщо вибрати в дереві структури корінь «Звіт».


7. Умовне оформлення. Містить елементи умовного оформлення, використовувані в варіанті звіту. Налаштування умовного оформлення була докладно розглянута в частині 1 цієї статті. Умовне оформлення налаштовується окремо для кожної з угруповань, але можна задати загальні елементи умовного оформлення для варіанту звіту, якщо вибрати в дереві структури корінь «Звіт».


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


На закінчення хотілося б відзначити, що настройки звіту можна не тільки зберігати в якості варіанту звіту, а й вивантажувати в файл (меню «Ще» - «Зберегти настройки»). Для завантаження необхідно вибрати «Завантажити настройки» і вибрати збережений файл. Таким чином, ми можемо передавати настройки варіанту звіту між різними базами, мають однакову конфігурацію.


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

Вважаю, немає потреби розповідати, що таке СКД, компонувальник налаштувань і взагалі весь набір об'єктів, призначених для роботи з СКД. Основні напрямки використання, не рахуючи хитрих дій в коді, це динамічні списки і звіти, причому в обох випадках «за кадром» залишається досить істотний функціонал. Ми часто навіть не замислюємося, яка логіка поведінки і взаємозв'язку всіх учасників процесу, тому що зазвичай вирішуємо досить прості завдання або покладаємося на замовчування платформи. Але, де є замовчування, є і внутрішня логіка, така собі «ведмежа послуга» 1С, подолати плоди якої для досягнення потрібного ефекту іноді важко і неочевидно, і при цьому досить лише правильно скористатися інструментарієм.

Бажаючі можуть пропустити частини 1-4 і відразу перейти до прикладів.

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

Використовуються СП 8.3.6 і вище, розділи ІТС (пункт 10.3.7.5 і ін.), Книга «Професійна розробка в системі 1С-Підприємство 8» (Казань, 2012, другий том). У книзі Е.Хрусталёвой взагалі нічого виразного на цю тему не знайшлося.

Частина 1

У компоновщика налаштувань, як відомо, є колекції «Налаштування», «Фіксовані настройки» (далі «ФН») і «Призначені для користувача настройки» (далі «ПН»). У звіту може бути задано кілька варіантів, при цьому зв'язку між варіантом, Н, ПН і ФН дуже своєрідні. Також, не забуватимемо про джерело доступних налаштувань, і його «прабатьків», яким зазвичай буває сама схема, теж має свої налаштування за замовчуванням.

* Налаштування - налаштування, створені в режимі Конфігуратора і змінювані в режимі редагування варіанту звіту;

* ПользовательскіеНастройкі - настройки, які змінює користувач в режимі «1С: Підприємство» суто частиною інтерфейсу;

* ФіксірованниеНастройкі - ті настройки, які задаються з вбудованої мови, в т.ч. неявно задаються системою. У цю властивість потрапляють значення відбору, які передаються в форму за допомогою її параметрів (структура «Відбір»).

Налаштування та ФН схожі по влаштуванню і мають колекцію «Відбір» типу «Відбір компонування даних», доступну для зміни складу в будь-який час існування звіту. При цьому Налаштування доступні для інтерфейсного зміни через правку варіанти, а ФН взагалі ніяк не доступні. ПН, в свою чергу, це «каша», де рівноправними елементами можуть бути як сам «Відбір», так і окремі об'єкти типу «Елемент відбору компонування даних» (т.зв. вкладений об'єкт). Незважаючи на наявність відповідних методів, змінювати склад колекції елементів ПН програмно не можна, якщо це ПН самого звіту, а не зроблені «з нуля» конструктором - 1С повідомить, що «Колекція налаштувань не може змінювати свій склад, так як вона пов'язана з настройками компонування даних. » На ІТС сказано: «Властивість недоступно для запису за допомогою вбудованої мови.», Але, як ми побачимо пізніше, вплинути на ПН можна. «Каша» об'єктів має внутрішні зв'язки - вона перевіряється на несуперечливість умов при формуванні звіту, і при зміні складу. На ІТС читаємо: «Не будуть додаватися елементи, які самі відзначені як призначені для користувача. Наприклад, в призначений для користувача добір не буде поміщений елемент відбору, який відзначений як користувальницький. Чи не будуть додані елементи, що містять призначені для користувача елементи. Наприклад, не буде додана група умов, якщо в цій групі присутні елементи, відмічені як призначені для користувача. Для вкладених елементів властивість РежімОтображенія не аналізується. Вони додаються або не повинні додаватися разом з батьківськими елементами. » Таким чином, негласно діє «старшинство» об'єктів. При цьому можна отримати ефект, коли інтерфейс дозволить вказати суперечливі відбори для варіанту і його ПН, а також всередині ПН.

Здавалося б, «старшим» є варіант. Але натискання на "Ще" / "Змінити варіант" і підтвердження змін в формі, що відкрилася викликає обробник події форми , При цьому відбір з'являється в панелі "Основні" на формі, спричиненої з "Налаштування ...", і з'являється на формі звіту, але НЕ показується на закладці "Відбір"; причому або він з'являється відразу і на основній формі звіту, і на формі за "Налаштування ..." (якщо є прапор "Включати в призначені для користувача настройки"), або ні там, ні там. Але в будь-якому випадку на закладці "Відбір" форми "Налаштування ..." його НЕ буде. Різниця між закладкою "Основні" формою "Налаштування ..." і основною формою звіту визначається полем "Режим редагування" (звичайний - тільки в "Налаштуваннях", швидкий - ще й на самій формі звіту), але це, думаю, всі знають. До речі, значення «Відбору» і «Швидких» ніяк не синхронізовані і можуть суперечити один одному, а ось «Швидкий» на формі звіту і на формі налаштувань жорстко синхронні. Так ось, при виправленні варіанту він сам стає зміненим (але його ID та ім'я не змінюються), а ось ПН залишаються НЕ модифікованими (тобто навіть якщо мова про них, тобто про прапор включення того чи іншого елемента в ПН ).

Натискання на "Вибрати варіант ..." і підтвердження змін в формі, що відкрилася викликає в наступному порядку події:

ПріЗагрузкеВаріантаНаСервере

ПріОбновленііСоставаПользовательскіхНастроекНаСервере

При цьому ні варіант, ні ПН нічим і ніяк не змінюються. Звідси ясно, що варіант і настройки якщо і пов'язані, то аж ніяк не прямо.

Натискання на "Налаштування ..." і підтвердження змін в формі, що відкрилася викликає тільки подія ПріОбновленііСоставаПользовательскіхНастроекНаСервере (При цьому ПН стають змінені, але уявлення і ключа (якщо їх не було) не отримують; якщо включений «Швидкий» для елементів об'єкта «Відбір» ПН, то крім "Відбір", з'являються і власне його елементи як поля, тобто . поводиться аналогічно вкладеним елементів. Ці зроблені настройки будуть збережені на виході і відновлюються при наступному вході в форму. Варіант воно ніяк чіпає і не змінює.

Натискання на "Ще" / "Встановити стандартні налаштування" в формі налаштувань (а також і пункт « стандартні налаштування»В правці варіанти) викликає тільки подія ПріОбновленііСоставаПользовательскіхНастроекНаСервере. При цьому варіант стає зміненим, а ось ПН змінюються. Якщо перед цим варіант був змінений, він залишається зміненим (ні скидання прапора змінений, ні скидання реально зроблених налаштувань не відбувається).

Натискання на «Властивості елемента налаштувань" в дереві структури на формі редагування варіанту додає об'єкт "Відбір", і він виходить порожній і ніяк не синхронізується з уже наявними відбором варіанти і наявними вкладеним елементам відбору. Варіант при цьому не змінюється.

Звідси рекомендація: якщо треба в режимі «Конфігуратор» задати якісь відбори, щоб не возитися з кодом і щоб при цьому їх не було у варіанті, але були б в інтерфейсі звіту - слід маніпулювати не елемент відбору варіанта, змінюючи їх властивості, а самим відбором , кнопками «Властивості елемента ...» і «Призначені для користувача настройки».

Додавання чого-небудь, що з'явився в Настройках, до складу ПН, вимагає дій в коді або інтерфейсі, а ось видалення і очищення Настройок позначаються на ПН відразу і без жодних оновлень, наприклад:

Отчет.КомпоновщікНастроек.Настройкі.Отбор.Елементи.Очістіть ();

Перед закриттям форми звіту система запитує, тільки якщо були зміни варіанту. Якщо були зміни ПН, вони збережуться автоматично без жодних питань, і так само автоматично спробують застосуватися в наступному сеансі роботи зі звітом.

Примітки:

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

При додаванні відбору на формі "Змінити варіант" він робиться відразу з встановленим прапором "Включати в ПН", але, повторюся, з точки зору вбудованої мови ПН залишаються незмінними.

Установка зміненим варіанту і установка зміненим ПН не пов'язані безпосередньо, це два різних напрямки змін.

У ПН, крім іншого, є «Додаткові настройки». Мені ніяк не вдалося зрозуміти, чим і в який момент вони заповнюються. Хоча в звіті і є настройки, "відмічені у відборі і умовному оформленні" як призначені для користувача (згідно СП), але додаткові настройки у всіх випадках виявлялися порожні. На ІТС про це нічого.

Незважаючи на твердження в СП, ПН прекрасно серіалізуются в xml.

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

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

Частина 2

Робота з Настройками і ФН через їх колекцію майже завжди допустима, але важливо пам'ятати, що змінюється сутність «третього рівня». На першому рівні завжди знаходяться налаштування самої СКД за замовчуванням, вони ж фігурують неявно в джерелі доступних налаштувань; на другому рівні - настройки використовуваного варіанта. Але тут логіка дозволяє або «затерти» нижележащие вказівки, або їх проігнорувати. А ось робота з ПН вольностей вже не передбачає, і тонкі маніпуляції треба робити за допомогою спеціальних методів, а іноді і тимчасових допоміжних об'єктів-посередників, наприклад:

Комп \u003d Новий КомпоновщікНастроекКомпоновкіДанних; // можна ще для початку // комп.Ініціалізіровать (НекійКомпоновщікНастроек.ПолучітьІсточнікДоступнихНастроек ()); комп.ЗагрузітьНастройкі (НекійКомпоновщікНастроек.Настройкі); НекійКомпоновщікНастроек.ЗагрузітьПользовательскіеНастройкі (комп.ПользовательскіеНастройкі);

У компоновщика налаштувань є метод (), Який завантажує значення налаштувань, передані в якості параметра методу. метод ПолучітьНастройкі() Дозволяє отримати копію поточних налаштувань (з урахуванням налаштувань). метод ЗагрузітьНастройкі() Завантажує передані настройки в компоновщик налаштувань (призначені для користувача настройки також перезаполнять на підставі переданих даних, з урахуванням наявності ключів, див. Приклад нижче).

Застосування налаштувань до основних налаштувань виконується в методі ПолучітьНастройкі() Компоновщика налаштувань. При цьому виконуються наступні дії:

* Для типів ЕлементОтбораКомпоновкіДанних вміст елементів копіюється в відповідні призначені для користувача елементи налаштувань.

* Для типів ОтборКомпоновкіДанних елементи, що знаходяться в основних налаштуваннях позначені символом Недоступний, залишаються без зміни. Елементи з ПН переносяться в основні. Вони додаються в кінець колекції для Відбору.

* Для типів ГруппаЕлементовОтбораКомпоновкіДанних встановлюється властивість Використання в відповідному елементі основних налаштувань (на підставі ознаки використання елемента ПН).

частина 3

При формуванні остаточної настройки, якщо цитувати ІТС, різні варіанти налаштувань комбінуються таким чином:

* Якщо який-небудь вид налаштувань цілком відзначений як користувальницький, то в результуючі настройки потрапляють ПН. При цьому, якщо будь-які елементи налаштувань відзначені як недоступні, то ці настройки будуть поміщені в результуючі настройки з властивості КомпоновщікНастроек.Настройкі.

* Якщо який-небудь вид налаштувань відзначений як користувальницький не цілком, а поелементно, то елементи, відмічені як призначені для користувача, потраплять в результуючі настройки з властивості КомпоновщікНастроек.ПользовательскіеНастройкі, а елементи, відмічені як недоступні, будуть взяті в результуючі настройки з властивості КомпоновщікНастроек.Настройкі .

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

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

Частина 4.

Розширення форми звіту надає нам параметри «ФН» і «ПН», проте ніде не рекомендується заповнювати їх безпосередньо, передаючи в форму. Як показали експерименти, без додаткових танців з бубном наповнення цих параметрів ігнорується - воно затирається при ініціалізації компоновщика в процесі відкриття і при отриманні раніше збережених ПН. Рекомендується працювати з ключами ПН, за якими отримувати їх зі сховища налаштувань і вже тоді розкривати і використовувати, і робиться це автоматично на боці форми звіту, а не викликає форми.

Параметр «ІсточнікДоступнихНастроек» автоматично транслюється в відомості компоновщика вже при створенні форми на сервері і перевизначатися не може. Вірніше, може, але ефект це дасть тільки після повного перевизначення всього ланцюжка пов'язаних об'єктів. При цьому ПолучітьІсточнікДоступнихНастроек() Аж до кінця відпрацювання всіх подій відкриття форми буде повертати Не визначено.

Зауважу, що параметри форми, по суті не є ключовими, «розтягують» свою дію на кілька подій, якщо встановлено прапор формування при відкритті. Так, в подію ОбработкаПроверкіЗаполненіяНаСервере, Викликаному при відкритті і формуванні, параметр «Відбір» буде доступний, а при ньому ж, але викликаному просто натисканням користувача на кнопку «Сформувати» - вже немає. Пов'язано це з тим, що всі ці події відпрацьовують за одне «відвідування» сервера, якщо формування при відкритті включено, і тільки в самому їх кінці управління передається на клієнт і викликається При відкритті. При цьому неключових параметри, природно, втрачаються.

Загальний порядок виконання подій при відкритті форми з прапором формування звіту при відкритті (трохи більше, ніж описано в «Проф.разработке»):

ПріСозданііНаСервере

ПередЗагрузкойВаріантаНаСервере

ПріЗагрузкеВаріантаНаСервере

ПередЗагрузкойПользовательскіхНастроекНаСервере

ПріЗагрузкеПользовательскіхНастроекНаСервере

ПріОбновленііСоставаПользовательскіхНастроекНаСервере

ОбработкаПроверкіЗаполненіяНаСервере

При відкритті

При цьому ні варіант, ні ПН не є зміненими, якщо не робилися спеціальні зусилля.

Частина 5.

Тепер зупинимося більш детально на завданню відкриття форми звіту з його побудовою і попередньо зазначеним відбором. Короткі відомості про це є на ІТС і в методичних рекомендаціях, Але там освітлений тільки сам принцип і не розкриті тонкощі. Отже, для контекстного виклику звіту необхідно передати його формі параметр «СформіроватьПріОткритіі», рівний Істина; і параметр «Відбір», що містить структуру. Ключі структури - це імена полів СКД або параметрів СКД, а значення і є їх значення. Цитуючи СП, якщо є параметр СКД з ім'ям, відповідним імені ключа структури, то значення буде встановлено йому. Якщо параметра немає, але є поле, то буде доданий відбір на це поле. При цьому, якщо є однойменні параметр і поле, то система просто тихо це проігнорує і не встановить нічого.

У «Проф.разработке» наведено приклад зміни (тобто перехоплення і перенастроювання) ПН «на льоту» в подію ПередЗагрузкойПользовательскіхНастроекНаСервере, Куди передається аргумент, що містить поточні ПН. Насправді це не завжди так - наприклад, можливі випадки, коли помилка збереження ПН в попередньому сеансі, або протиріччя між Настройками, ФН і ПН приведуть до того, що аргумент «Налаштування» буде порожній. І що найцікавіше, повноцінно переналаштувати його в цій події не вдасться, це можна зробити тільки «в кінці» послідовності подій, а саме, в подію ОбработкаПроверкіЗаполненіяНаСервере.

Подивимося, що ми маємо перед завантаженням ПН на сервері.

Для простого випадку, коли в СКД нічого не предзадано і ніякі елементи не включені в ПН, ситуація така: Налаштування - порожні; ФН - містять правильний відбір; ПН містять порожній Відбір. Формування працює правильно, але з точки зору користувача інтерфейс суперечить нутрощів і бентежить - відбір працює, але його не видно. Аналогічно, якщо в настройках структури варіанту включити Відбір в ПН, звіт також будується з урахуванням відбору, але користувач також не бачить жодних відбори.

Задамо в налаштуваннях СКД в Конфігураторі предотбори (рівні порожнім значенням) і включимо їх в ПН. За ідеєю, ФН повинні заповнити Налаштування, а ті - ПН, але насправді маємо: в Настройках - Відбір з необхідним елементом, але порожнім правим значенням, ФН - містять правильний відбір, а ПН - все одно не містять нічого. До того ж, в цьому випадку і звіт не побудували, тому що праве значення відбору порожньо, незважаючи на передане в параметрі Відбір значення.

Спроба попрацювати з елементами ПН також не дає результату. Для елемента ПН можна змінити хіба що прапор «Використання» і участь в «Швидких». Значення відбору на інтерфейсі буде порожнім, ніяких помилок система не видасть. Аналогічно, спроба попрацювати з Відбором ПН також відпрацює, в отладчике праве значення буде видно як вірно заповнене, але на інтерфейсі ви не побачите нічого. А міняти склад ПН, нагадаю, не можна. Таким чином, потрібні додаткові хитрощі. наприклад:

& НаСервере Процедура УстановітьПредзаданниеОтбори (ПользНастройкі) Якщо не Параметри.Свойство ( "Відбір") Тоді Повернення КонецЕсли; Якщо Параметри.Отбор.Колічество () \u003d 0 Тоді Повернення КонецЕсли; рТіпЕО \u003d Тип ( "ЕлементОтбораКомпоновкіДанних"); Для кожного киз З Параметри.Отбор Цикл рПоле \u003d Новий ПолеКомпоновкіДанних (кіз.Ключ); // Якщо (ТіпЗнч (кіз.Значеніе) \u003d Тип ( "Масив") або ТіпЗнч (кіз.Значеніе) \u003d Тип ( "СпісокЗначеній")) і кіз.Значеніе.Колічество ()\u003e 1 Тоді рВідСравненія \u003d ВідСравненіяКомпоновкіДанних.ВСпіске; Інакше рВідСравненія \u003d ВідСравненіяКомпоновкіДанних.Равно; КонецЕсли; // рНужнийОтбор \u003d Не визначено; // дивимося, чи є Відбір в польз.настройках рНужнийЕО \u003d Не визначено; // дивимося, чи є окремий ЕлементОтбораКомпоновкіДанних в польз.настройках Для кожного елнастр З ПользНастройкі.Елементи Цикл Якщо ТіпЗнч (елнастр) \u003d Тип ( "ОтборКомпоновкіДанних") і рНужнийОтбор \u003d Не визначено Тоді // він може бути тільки один рНужнийОтбор \u003d елнастр; // це можна було б робити і поза циклом, але перебирати польз.настройкі треба і заради елементів ... ІначеЕслі ТіпЗнч (елнастр) \u003d рТіпЕО Тоді // це елемент відбору, їх може бути багато, але нас цікавлять не початкові або з потрібним полем Якщо елнастр.ЛевоеЗначеніе \u003d рПоле або елнастр.ЛевоеЗначеніе \u003d Не визначено і рНужнийЕО \u003d Не визначено Тоді рНужнийЕО \u003d елнастр; КонецЕсли; КонецЕсли; КонецЦікла; // Якщо рНужнийОтбор<>Не визначено Тоді // він йде як пріоритетний рНужнийЕОізОтбора \u003d не визначено; Для кожного елотб З рНужнийОтбор.Елементи Цикл Якщо елотб.ЛевоеЗначеніе \u003d рПоле Тоді рНужнийЕОізОтбора \u003d елотб; Перервати КонецЕсли; КонецЦікла; Якщо рНужнийЕОізОтбора \u003d Не визначено Тоді рНужнийЕОізОтбора \u003d рНужнийОтбор.Елементи.Добавіть (рТіпЕО); рНужнийЕОізОтбора.ЛевоеЗначеніе \u003d рПоле; КонецЕсли; рНужнийЕОізОтбора.ВідСравненія \u003d рВідСравненія; рНужнийЕОізОтбора.ПравоеЗначеніе \u003d кіз.Значеніе; рНужнийЕОізОтбора.Іспользованіе \u003d Істина; // рНужнийЕО.Іспользованіе \u003d Брехня; ІначеЕслі рНужнийОтбор \u003d Не визначено і рНужнийЕО<>Не визначено Тоді // ставимо на елемент рНужнийЕО.ЛевоеЗначеніе \u003d рПоле; рНужнийЕО.ВідСравненія \u003d рВідСравненія; рНужнийЕО.ПравоеЗначеніе \u003d кіз.Значеніе; рНужнийЕО.Іспользованіе \u003d Істина; КонецЕсли; рНужний \u003d Не визначено; Для кожного елотб З Отчет.КомпоновщікНастроек.Настройкі.Отбор.Елементи Цикл // по-хорошому, тут повинен бути рекурсивний пошук! Якщо ТіпЗнч (елотб) \u003d рТіпЕО і елотб.ЛевоеЗначеніе \u003d рПоле Тоді рНужний \u003d елотб; Перервати КонецЕсли; КонецЦікла; Якщо рНужний \u003d Не визначено Тоді рНужний \u003d Отчет.КомпоновщікНастроек.Настройкі.Отбор.Елементи.Добавіть (рТіпЕО); рНужний.ЛевоеЗначеніе \u003d рПоле; КонецЕсли; рНужний.ВідСравненія \u003d рВідСравненія; рНужний.ПравоеЗначеніе \u003d кіз.Значеніе; рНужний.Іспользованіе \u003d Істина; // КонецЦікла; Отчет.КомпоновщікНастроек.ФіксірованниеНастройкі.Отбор.Елементи.Очістіть (); // інакше скаже, що елементи перетинаються / суперечать КонецПроцедури

Викликати це найбільш правильно так:

& НаСервере Процедура ОбработкаПроверкіЗаполненіяНаСервере (Відмова, ПроверяемиеРеквізіти) УстановітьПредзаданниеОтбори (Отчет.КомпоновщікНастроек.ПользовательскіеНастройкі); КонецПроцедури

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

& НаКліенте Процедура ОткритьОтчет (Команда) Якщо ЗначеніеЗаполнено (Об'ект.Ссилка) Тоді отб \u003d Новий Структура ( "СсилкаНаСправочнік", Об'ект.Ссилка); // так поле названо в СКД звіту ПараметриФорми \u003d Новий Структура ( "Відбір, СформіроватьПріОткритіі", отб, Істина); ОткритьФорму ( "Отчет.Отчет1.Форма.ФормаОтчета", ПараметриФорми, ЕтаФорма); КонецЕсли; КонецПроцедури

Частина 6.

При необхідності змінювати налаштування звіту в процесі роботи з ним, в т.ч. і при запуску, і після відкриття, найбільш правильним способом представляється зміна «від початку», тобто від налаштувань СКД. Зміна схеми СКД виконується тільки з об'єктом Звіт (або ВнешнійОтчёт), а не з даними форми, і саме по собі нічого не змінює - в Настройках і в ПН залишається той же, що і було, а ФН взагалі можуть залишатися порожні. Тому, в залежності від наших завдань:

після виконання

Отчет.КомпоновщікНастроек.ЗагрузітьНастройкі (СКД.НастрПоУмолч)

змінюється тільки варіант, і нічого більше;

Після виконання прийому, наведеного в п.2 (з використанням «посередника» і методу ЗагрузітьПользовательскіеНастройкі()

спрацьовує, тільки якщо скинути поточні ПН засобами інтерфейсу. Самі по собі вони, при зміні варіанту, не зміняться. При цьому змінюється Відбір, але не додається новий ЕлементОтбора.

після виконання

ЕтаФорма.СоздатьЕлементиФормиПользовательскіхНастроек (, РежімОтображеніяНастроекКомпоновкіДанних.Все)

платформа просто тихо падає. Перевірено на декількох різних релізах. А виклик з режимом відображення налаштувань тільки для швидких не має сенсу - ми ж не вплинули на їх склад, тому нічого все одно не зміниться.

А оскільки нам все-таки потрібно повноцінно змінити не тільки внутрішні відбори, а й відображення на формі звіту і в пов'язаних формах, то або доводиться міняти тільки Відбір, або діяти в такий спосіб:

& НаСервере Процедура ІзменітьСКД () рОб'ект \u003d РеквізітФормиВЗначеніе ( "Звіт"); отб \u003d рОб'ект.СхемаКомпоновкіДанних.ВаріантиНастроек.Получіть (0) .Настройкі.Отбор; ЕО \u003d отб.Елементи.Добавіть (Тип ( "ЕлементОтбораКомпоновкіДанних")); ео.ЛевоеЗначеніе \u003d Новий ПолеКомпоновкіДанних ( "СсилкаНаСправочнік.Поле1"); ео.ВідСравненія \u003d ВідСравненіяКомпоновкіДанних.Равно; ео.ПравоеЗначеніе \u003d Істина; ео.Іспользованіе \u003d Істина; ЗначеніеВРеквізітФорми (рОб'ект, "Звіт"); Отчет.КомпоновщікНастроек.ЗагрузітьНастройкі (рОб'ект.СхемаКомпоновкіДанних.НастройкіПоУмолчанію); Отчет.КомпоновщікНастроек.Восстановіть (); // бажано, хоча ФН це все одно не зачіпає. // власне, саме це можна назвати зміною складу ПН Для кожного ел З Отчет.КомпоновщікНастроек.Настройкі.Отбор.Елементи Цикл ел.РежімОтображенія \u003d РежімОтображеніяЕлементаНастройкіКомпоновкіДанних.БистрийДоступ; Якщо ПустаяСтрока (ел.ІдентіфікаторПользовательскойНастройкі) Тоді // можна для елемента ПН використовувати метод ел.УстановітьІдентіфікатор, см.его довідку в СП, там все досить виразно ел.ІдентіфікаторПользовательскойНастройкі \u003d "ID123"; // важливо - ідентифікатор може бути БУДЬ-ЯКИМ, що не UUID і не GUID! ел.ПредставленіеПользовательскойНастройкі \u003d "Проба"; КонецЕсли; КонецЦікла; комп \u003d Новий КомпоновщікНастроекКомпоновкіДанних; комп.ЗагрузітьНастройкі (рОб'ект.СхемаКомпоновкіДанних.НастройкіПоУмолчанію); Отчет.КомпоновщікНастроек.ЗагрузітьПользовательскіеНастройкі (комп.ПользовательскіеНастройкі); Для кожного ел З Отчет.КомпоновщікНастроек.ПользовательскіеНастройкі.Елементи Цикл ел.РежімОтображенія \u003d РежімОтображеніяЕлементаНастройкіКомпоновкіДанних.БистрийДоступ; // витягнемо на форму звіту КонецЦікла; // і ось тепер це дасть ефект: ЕтаФорма.СоздатьЕлементиФормиПользовательскіхНастроек (, РежімОтображеніяНастроекКомпоновкіДанних.БистрийДоступ); КонецПроцедури

Власне, вивчати цю механіку можна ще довго. Ця публікація виросла з вивчення способів вирішення однієї конкретної проблеми, І тому досить однобока; але подоздреваю, що про внутрішню логіку налаштувань, особливо призначених для користувача, взагалі можна написати окрему книгу не тонше, ніж хрусталёвская. У мене на це, на жаль, сил і часу немає. Кому знадобляться конкретні напрацювання - вже добре.

Дещо з'ясовано експериментально і тому спірно. Знаючі більше - запрошуються критикувати і коментувати.

Для одного звіту може бути задано кілька варіантів його візуального представлення - тобто олна і та ж інформація може бути по-різному розгорнута, згрупована і т.д. Зумовлені варіанти задаються в конструкторі СКД на закладці Налаштування (рис.); також варіант може бути створений і в режимі Підприємство.

Варіант, розташований вище всіх по порядку, буде вважатися варіантом за умовчанням.

Для конфігурально зумовлених варіантів можна задати, які їх налаштування будуть доступні користувачеві. Наприклад, можна заборонити робити відбір або угруповання для елемента. Це вказується в Свойствах елемента налаштувань:

Вказуємо варіант доступу користувача до налаштування:

Від цього залежить, що користувач побачить в налаштуванні звіту в Підприємстві:

Питання 11.32 іспиту 1С: Професіонал по Платформі. Який варіант звіту в схемі компоновки даних буде вважатися за замовчуванням?
  1. Той, який стоїть в списку варіантів першим
  2. Той, у якого встановлено властивість варіант за замовчуванням
  3. Той, який визначався першим в процесі створення варіантів
Правильна відповідь перший, опис в тексті.
Питання 11.35 іспиту 1С: Професіонал по Платформі. Як додати настройку в список призначених для користувача налаштувань?
  1. в формі настройки призначеного для користувача елементу можна вказати ознаку того, що елемент є призначеним для користувача
  2. в формі настройки призначеного для користувача елементу активувати швидкий доступ в режимі редагування
  3. додавання здійснюється установкою прапорця у властивості "Використовувати"
Правильна відповідь перший.
Питання 11.40 іспиту 1С: Професіонал по Платформі. В налаштуваннях системи компоновки даних обов'язково повинні бути задані
  1. структура налаштувань
  2. параметри
  3. Вибрані поля
  4. групуються поля
  5. Сортування
  6. Все вищезазначене
Правильна відповідь перший. Структура обов'язкове, все решта СКД може додати автоматично, або воно необов'язково в принципі.
Питання 11.41 іспиту 1С: Професіонал по Платформі. Яким чином буде виглядати форма звіту після застосування наступних установок?
  1. У вигляді таблиці з чотирьох колонок: "Товар", "Склад", "Кількість залишок", "Сума залишок"
  2. У вигляді таблиці з трьох колонок: "Товар", "Склад", "Кількість залишок"
  3. У вигляді таблиці, кількість колонок якої буде залежати від кількості складів, на яких існують ненульові залишки
  4. Звіт сформовано не буде
Правильна відповідь четвертий - в кореневому елементі структури налаштувань не стоїть галочка, отже, дані для виведення не визначені.
Питання 11.42 іспиту 1С: Професіонал по Платформі. Що станеться при формуванні звіту, якщо в призначеному для користувача режимі налаштування системи компоновки даних відсутні?
  1. Будуть використані "налаштування", задані розробником в схемі компоновки даних
  2. Зі списку варіантів налаштувань буде використаний варіант, наступний за поточним
  3. Будуть використані для користувача настройки
  4. Звіт сформовано не буде
Правильна відповідь четвертий - Пріоріті те, що вказав користувач. Призначені для користувача настройки порожні, отже звіт сформований не буде.
Питання 11.43 іспиту 1С: Професіонал по Платформі.
  1. На ліву межу першої секунди дати, зазначеної в параметрі "Період"
  2. Будуть отримані актуальні залишки, якщо інше значення не задано в параметрі системи компоновки даних, створеному на підставі імені зовнішнього параметра, зазначеного в тексті запиту для параметра "Період" віртуальної таблиці
Правильна відповідь четвертий. Галочка "Період" не варто, тобто пользвательскій відбір не заданий. У загальному випадку це означає актуальні залишки, але можливо, параметр періоду визначено в інший налаштування СКД.
Питання 11.44 іспиту 1С: Професіонал по Платформі. На яку точку на осі часу будуть отримані залишки при формуванні звіту?
  1. На ліву межу першої секунди дати, зазначеної в параметрі "Період"
  2. На праву межу останньої секунди дати, зазначеної в параметрі "Період"
  3. Будуть отримані актуальні залишки
  4. Будуть отримані актуальні залишки, якщо інше значення не задано в параметрі системи компоновки даних, створеному на підставі імені зовнішнього параметра, зазначеного в тексті запиту для параметра "Період" віртуальної таблиці
Правильна відповідь перший - тут явно вказано відбір.

Питання 11.45 іспиту 1С: Професіонал по Платформі. На малюнку показана форма звіту, створена системою за замовчуванням. Елемент якого виду налаштувань обведений рамкою?

  1. призначених для користувача налаштувань
  2. фіксованих налаштувань
  3. варіанти налаштувань
  4. Елемент може ставитися до будь-якого виду налаштувань, в залежності від значення його властивості "Шлях до даних"
Правильна відповідь перший.
Питання 11.46 іспиту 1С: Професіонал по Платформі. У звіті відбір по полю "Склад" заданий одночасно у всіх видах налаштувань. Що станеться при спробі сформувати звіт?
  1. Звіт сформовано не буде
  2. Звіт буде сформований із застосуванням відбору з налаштувань
  3. Звіт буде сформований із застосуванням відбору з фіксованих налаштувань
  4. Звіт буде сформований із застосуванням відбору з поточного варіанту налаштувань
Що за "всі види налаштувань" незрозуміло, але за відповідями правильний варіант перший.
Питання 11.47 іспиту 1С: Професіонал по Платформі. У звіті відбір по полю "Склад" заданий одночасно в призначених для користувача настройках і в поточному варіанті налаштувань. Що станеться при спробі сформувати звіт?
  1. Звіт буде сформований із застосуванням відбору з налаштувань, якщо стоїть прапор "Використання". Якщо прапор "Використання" - не встановлений, то відбору не буде
  2. Звіт буде сформований із застосуванням відбору з налаштувань, якщо стоїть прапор "Використання". Якщо прапор "Використання" - не встановлений, то буде використана настройка відбору з варіанта налаштувань
  3. Звіт буде сформований із застосуванням відбору з варіанта налаштувань, якщо стоїть прапор "Використання". Якщо прапор "Використання" - не встановлений, то відбору не буде
  4. Звіт буде сформований із застосуванням відбору з варіанта налаштувань, якщо стоїть прапор "Використання". Якщо прапор "Використання" - не встановлений, то буде використана настройка відбору з налаштувань
Правильний варіант перший.
Питання 11.49 іспиту 1С: Професіонал по Платформі. При роботі з настройками користувач може задати поле угруповання
  1. В окремому вікні "Угруповання"
  2. В окремому вікні "Редагування полів угруповання"
  3. На закладці "группіруемих поля"
  4. В окремому вікні "Угруповання" і на закладці "группіруемих поля"
  5. В окремому вікні "Угруповання", в окремому вікні "Редагування полів угруповання і на закладці" группіруемих поля "
Правильна відповідь п'ятий. Вікно Угруповання:

Опції Редагування полів угруповання і групуються поля:

Питання 11.50 іспиту 1С: Професіонал по Платформі. Користувач створив "з нуля" варіант налаштувань. Які настройки йому довелося редагувати? Виберіть найбільш повну та правильну відповідь
  1. Вибрані поля звіту, відбір звіту, відбір по складу, додаткові налаштування таблиці, сортування номенклатури, параметри, умовне оформлення номенклатури
  2. Вибрані поля звіту, відбір звіту, додаткові налаштування таблиці, умовне оформлення номенклатури, вибрані поля складу, параметри, сортування звіту
  3. Вибрані поля звіту, відбір звіту, відбір по складу, додаткові налаштування таблиці, умовне оформлення номенклатури, параметри, структуру звіту
  4. Вибрані поля звіту, відбір звіту, відбір по складу, додаткові налаштування звіту, параметри, умовне оформлення номенклатури, структуру звіту
Правильна відповідь третій, потрібно уважно подивитися на скріншот.

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

Увійдіть на сайт як учень

Увійдіть як учень, щоб отримати доступ до матеріалів школи

Система компоновки даних 1С 8.3 для початківців: робимо зв'язок наборів даних

  • Написати звіт, який виводить клієнтів і їх улюблені продукти. У кожного клієнта є улюблений колір, а у кожного продукту свій колір - ось на підставі цих квітів і потрібно визначати "Улюблені" продукту. Наприклад, якщо у Андрія улюблений колір червоний, то одним з його улюблених продуктів будуть помідори (вони червоного кольору).
  • Застосувати в звіті два набори даних. Перший набір - це дані з таблиці довідника "Клієнти". Другий - дані з таблиці довідника "Їжа".
  • здійснити зв'язок цих двох наборів, Щоб в звіті залишилися тільки улюблені продукти для кожного з клієнтів.

Створюємо новий звіт

Відкриваємо базу "Гастроном" в конфігураторі і через головне меню створюємо новий звіт:

Вид документа - "Зовнішній звіт":

У формі нового звіту вказуємо ім'я "Урок6" і натискаємо кнопку "Відкрити схему компоновки даних":

Ми залишаємо ім'я схеми за замовчуванням:

Додаємо перший набір даних

У відкрилася схемою переходимо на закладку "Набори даних" і через зелений плюсик вибираємо "Додати набір даних - запит":

Викликаємо конструктор запиту:

Вказуємо таблицю "Клієнти" і поля, які потрібно отримати із запиту:

Додаємо другий набір даних

Додаємо другий набір даних:

Виділяємо його (НаборДанних2) і знову викликаємо конструктор запиту:

Вказуємо таблицю довідника "Їжа" та поля, які потрібно отримати із запиту:

Вийшов такий текст запиту:

Зверніть увагу, що у нас зараз в звіті присутні два набори даних: НаборДанних1 і НаборДанних2. У кожного свій текст запиту і свої дані.

Робимо імена більш наочними

Для наочності, давайте перейменуємо НаборДанних1 в Клієнти, а НаборДанних2 в Їжа.

Зробіть це подвійним клацанням по кожному з наборів:

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

В даний момент у набору "Клієнти" наступні поля: "Найменування" і "ЛюбімийЦвет", а у набору "Їжа": "Найменування" і "Колір".

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

Виділяємо набір "Клієнти" і міняємо імена полів так:

Потім виділяємо набір "Їжа" і міняємо імена полів так:

Викликаємо конструктор налаштувань

Нарешті, переходимо на закладку "Налаштування" і натискаємо чарівну паличку, щоб викликати конструктор налаштувань:

Тип звіту - "Список ...":

Вибираємо поля для звіту з обох наборів:

Бачите чому так важливо було змінити імена полів? На етапі налаштувань компонування даних ми не бачимо з яких наборів ці поля. Бачимо тільки їх імена.

перевіряємо звіт

Зберігаємо звіт і формуємо в режимі користувача:

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

Але нам потрібно з усіх цих записів залишити тільки ті у яких поле "ЛюбімийЦветКліента" одно полю "ЦветЕди":

Здійснюємо зв'язок двох наборів даних

Для цього здійснимо зв'язок двох наборів даних (Клієнти і Їжа) по полях ЛюбімийЦветКліента і ЦветЕди.

Переходимо на закладку "Зв'язки наборів даних" і натискаємо на кнопку-плюсик, щоб додати новий зв'язок:

Налаштовуємо параметри як на малюнку нижче:

Зроблю пояснення.

Джерело і приймач зв'язку. Ну тут все зрозуміло. Вказуємо перший набір (Клієнти) і другий набір (Їжа) даних. Хочу звернути особливу увагу, що зв'язок буде здійснюватися за принципом зовнішнього лівого з'єднання (Ми його проходили в темі запитів в минулих модулях). Виходячи з цього і потрібно вибирати який набір буде джерелом, а який приймачем.

Вираз джерело. Вказуємо тут вираз або просто поле з набору даних джерела (ми тут вказали поле ЛюбімийЦветКліента з набору Клієнти).

Вираз приймач. Вказуємо тут вираз або просто поле з набору даних приймача (ми тут вказали поле ЦветЕди з набору Їжа).

Таким чином дана зв'язок залишить з минулого списку тільки ті рядки, у яких поле ЛюбімийЦветКліента одно полю ЦветЕди.

Збережемо звіт і запустимо в режимі користувача:

Відмінно!

Зроблю пояснення про поле " Умова зв'язку", Про яке так часто б'ють свої списи початківці програмісти.

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

В цьому випадку для всіх рядків з джерела зв'язку перед здійсненням зв'язку буде перевірятися цей вислів (умова зв'язку). І якщо цей вислів одно ІСТИНА, то робитиметься спроба встановити зв'язки цього рядка з рядками з приймача зв'язку. Якщо ж вираз дорівнює БРЕХНЯ, то таких спроб робитися не буде.