1с скд не работает группировка
Система компоновки данных - очень богатый функционально инструмент, который позволяет реализовать очень много отчётов и их настроек, не прибегая к непосредственному программированию. Зачастую разработчики отчётов (особенно начинающие) даже не догадываются, что их кажущаяся сверхсложной задача по выводу данных не только вполне реализуема штатными механизмами СКД, но ещё и делается с помощью простейших операций. А некоторые обычные пользователи находят для себя много неожиданных открытий в задачах, для которых они, как правило, использовали Excel.
Дабы избежать комментариев типа "тоже мне открытие!", оговорюсь сразу: статья рассчитана на неискушённых СКД-разработчиков, тем кто это и так знает не обязательно высказывать своё "фи!", поймите, то что очевидно для вас - не всегда бывает очевидно остальным.
Для наглядного представления реализации части трюков я сделал небольшие заготовки в виде внешних схем СКД. Описание трюков и скриншоты постарался делать так, чтобы суть и техника реализации трюка были понятны без необходимости скачивания схем. Для кого-то этого будет вполне достаточно, но если что-то непонятно, то всегда можно скачать соответствующую схему и посмотреть непосредственно реализацию.
Трюк №1. Многоликость правого значения.
Итак, для разогрева начнём с чего-нибудь попроще. В таких механизмах СКД, как "Отбор" или "Условное форматирование" вы наверняка сталкивались с колонками "Поле" (или "Левое значение") и "Значение" (или "Правое значение"). Профессионалы, наверняка знают этот трюк, но начинающим не всегда легко догадаться, что поле компоновки данных можно использовать как слева, так и справа (т.е. сравнивать не только заданные фиксированные значения, но и другие поля СКД в пределах одной строки). Для этого достаточно в поле правого значения зайти в режим редактирования, нажать кнопку очистки значения ("кретик"), затем нажать появившуюся кнопку выбора типа (буква "Т") и выбрать тип "Поле компоновки данных".
Пример.
В качестве примера я не стал изобретать велосипед, а взял самую обычную оборотно-сальдовую ведомость по счету 60 из демо-версии 1С:Бухгалтерии (я использую ред. 2.0.). Кто не знает, начиная с редакции 2.0 этот отчёт сделан на базе СКД.
Итак, зададим прямо в ней отбор для строк с условием "БУ Дт (оборот)" Равно "БУ Кт (оборот)", а также применим к отчёту условное оформление, подсветив жёлтым цветом ячейки строк, где "БУ Кт (кон. сальдо)" Больше "БУ Кт (оборот)". Если кто не знает, как включить панель "Оформление" - найдите кнопку "Параметры панели настроек" справа от надписи "Панель настроек".
Конечный результат должен получиться примерно таким:
Трюк №2. Отбор на группировках.
Все знают, что такое Отбор в СКД, но не все знают, что его можно применять не только для отчета в целом, но и на отдельных группировках строк и колонок. Прикладных задач для задействования такого средства много. Например, условная детализация (ограничение для каких группировок верхнего уровня выводить детализацию, а для каких нет), или вариативная детализация (для разных значений группировок верхнего уровня выводить разные расшифровки). На одном из проектов УПП, к примеру, пришлось делать форму калькуляции себестоимости с фиксированной структурой (отдельный справочник) и для разных статей калькуляции выводить расшифровки или по статьям затрат, или по конкретным затратам или не выводить ничего. Благодаря этому трюку не пришлось отказываться от СКД при разработке отчёта.
Пример.
Цель примера: отобразить ОСВ, в которой для взаиморасчетных счетов (60,62,76) показать расшифровку по контрагентам, а для затратных (20,23,25,26) - по статьям затрат.
Сама СКД реализована в виде набора данных, где используется запрос к виртуальной таблице остатков и оборотов регистра бухгалтерии "Хозрасчетный".
Размещаем вложенные группировки "Организация" и "Счет". В группировке "Счет" параллельно размещаем 2 группировки "Субконто1" и "Субконто2", для которых задаем соответствующие отборы.
Иллюстрацию настройки привожу в скриншоте:
Если в основных настройках отчёта на закладке "Другие настройки" вы не отключали вывод отборов, то это обязательно нужно будет сделать в "других настройках" наших группировок "Субконто1" и "Субконто2"
Трюк №3. Шапка-невидимка
Следующий трюк можно представить, как продолжение предыдущего. Если вы обратили внимание, в получившемся отчёте несмотря на то, что фактически у нас выводится только одно субконто, в шапку попадают оба (и "Субконто1" и "Субконто2"). К сожалению разработчики СКД не предусмотрели возможность регулирования видимостью шапки или использования какого-нибудь служебного символа, при установке которого в качестве заголовка, шапка поля бы не формировалась. Но, как вы уже, наверное, догадались есть трюк, который в какой-то степени поможет обойти данное ограничение.
При разработке схемы в предопределённом макете оформления добавьте макет группировки, с определением по имени группировки "Невидимка" так, как показано на скриншоте. Обратите внимание, что поле "Область" должно остаться пустым!
А затем задайте для группировки "Субконто2" имя "Невидимка":
И вуаля. шапка группировки "Субконто2" исчезает, а отчёт становится вот таким:
Спросите, почему макет оформления задаётся через имя, а не через указание конкретного поля группировки? Просто так получается более универсальное решение и впоследствии это имя группировки можно задать в вариантах отчёта на любой группировке, а вот менять предопределённый макет в вариантах уже не получится.
Да, есть ещё один ньюанс этого трюка: учитывайте, что "шапка-невидимка" накрывает не только эту группировку, но и все нижестоящие! Т.е. если вы назначите имя "Невидимка" группировке "Субконто1", то в шапке не будет видно ни "Субконто1", ни "Субконто2"!
Трюк №4. Называй меня как хочешь
Большинство разработчиков СКД знают, как можно задать заголовок поля запроса. На закладке СКД "Наборы данных", достаточно поставить галочку отмены автозаголовка и внести в поле "Заголовок" необходимый текст. Минус состоит в том, что в пользовательском режиме, этот способ недоступен, а переименовать заголовок хочется не прибегая к помощи конфигуратора. Так вот в настройках вариантов отчёта есть не только способ переименовать заголовки полей, но и "накрыть" их группировочной "шапкой". Для этого на закладке "Выбранные поля" необходимо выделить нужные поля и нажать правую кнопку мыши. Как видно на скриншоте для полей доступны опции "Установить заголовок" и "Сгруппировать поля".
Обратите внимание, что для полей группировок установку заголовка необходимо делать также именно через закладку "Выбранные поля", а не через контекстное меню "Установить имя" в верхней (структурной) части настройки варианта!
После всех настроек вариант отчёта выглядит вот так:
P.S.
Небольшая подсказка для тех, кто будет качать схему. Схема - одна, но все трюки выполнены в виде отдельных вариантов настроек отчёта этой схемы:
Здравствуйте.
Сделал запрос для отчета на СКД, проверил его в консоли - работает как надо.
Засунул этот же запрос в сам отчет - неверно работает группировка в обной из таблиц.
Как это победить? Куда посмотреть?
там я дам ответ на ваш (и многих других) сокровенный вопрос - "Сделал запрос для отчета на СКД, проверил его в консоли - работает как надо."
(1) Проверил в консоли СКД - да, дает неверный результат, даже если отключить Группировки где это возможно
Про автозаполнение понял, но не знаю как размечать.
Запрос все-таки приложу.
В последнем запросе пакета сделать что-то типа:
ВЫБРАТЬ
.
МесяцРасхода,
. >
.
Это будет не очень оптимально, зато запрос будет формироваться наиболее предсказуемо.
<> Можно не вписывать руками а добавить через конструктор запросов. Если открыть его из конструктора схемы компоновки компоновки данных - там будет закладка "Компоновка данных" (или что-то типа того).
(4) дэк ты покажи исходный запрос, запрос из консоли и настройки. и тогда будет проще понять что и где подкрутить
вчера уже обсуждали такую проблему. написали, что не нужно включать его в список ВЫБРАТЬ. или применить к ней функцию МИНИМУМ и все-таки выбрать в последней части запроса
ну давай что ли теперь картинки. как в консоли запросов, а как в консоли СКД. это прям что-то новенькое когда одинаковые запросы дают разный результат
(8) Поясни что значит не нужно включать?
(11) Проблема как раз и возникает в СКД - один и тот же запрос в консоли запросов и консоли СКД дает разный результат.
(13) текст запроса из (7) это и есть запрос после оптимизации. ничего в нем больше не должно меняться. что=то тут нечисто. или автор не умеет консолью пользоваться
(15) В консоли компоновки данных, тебе нужно получить итоговый запрос измененный СКД. в Инструментах разработчика это делается кнопкой "Обновить макет компоновки и открыть его запросы в консоли запросов". То что ты скинул это уже отредактированный запрос? или это просто текст запроса из конструктора скд, который ты скопировал из запроса и туда воткнул?
(16) либо можешь отловить готовый текст запроса программно в событии ПриКомпоновкеРезультата модуля объекта
(16) Да, это текст запроса из Консоли Запросов, закинутый в Консоль СКД.
Я не вижу кнопку Обновить макет в обработке КонсольСистемыКомпоновкиДанных.
Или я не то использую или смотрю не туда.
(18) Да ты используешь другую обработку, в ней к сожалению не подскажу. Но можно отловить программно измененный текст запроса. в модуле объекта отчета добавь следующий код:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
И отладчиком в наборе данных сможешь посмотреть измененный текст запроса.
(19) В отладчике точка останова не срабатывает. Как ее отловить то?
База файловая, не сервер, точки по тексту других модулей стопорятся нормально
(20) Просто при нажатии стандартной кнопки сформировать отчет, туда попадает отладчиком. Создал точно в модуле ОБЪЕКТА ОТЧЕТА, а не формы?
(22) Да, точно в модуле объекта (в форме он ругается что не знает что такое Компоновщик :) ).
Про добавлении строчки "СтандартнаяОбработка = Ложь;" отчет не выполняется - что правильно, но на точку останова не реагирует.
(23) Выгрузил отчет как внешний - стала точка останова работать. ТОлько я не пойму - как запрос вернуть в исходную форму? Если я программно подставляю текст запроса на свой - все равно СКД его корявит.
(24) Это так оптимизирует СКД, нужно правильно строить запросы изначально. 99% что решение из (8) поможет. Попробуйте добавить регистратор в группировку в последнем запросе, но не включать в выборку
(25) У меня там куча Виртуальных таблиц. Как можно не включать в выборку, но добавить в группировке?
Если я убираю Регистратор в первом запросе, он пропадает и для остальных.
(26) Причем тут первый запрос? Вам в последнем пакете, нужно сгруппировать по регистратору, но просто не включать его туда в выборку
(26) Решение из (5) непонятное или по какой-то другой причине не подошло?
Или просто решение не нужно, а нужны рецепты как правильно стучать в бубен?
P.S. Причина большинства подобных проблем обычно в том что генерация запроса для набора данных (то что местные "специалисты" называют "оптимизацией" СКД) сопоставляет поля только по имени, почти не глядя на структуру запроса. Т.е. если, например, в каждом запросе пакета есть поле Организация и на него наложен отбора - отбор будет применён ко всем запросам пакета. В т.ч. и в параметры виртуальных таблиц. Рекомендация в (5) делает все поля из всех запросов пакета, кроме последнего, недоступными для отбора (при этом если они будут не задействованы - то всё равно удалятся, на удаление из запросов пакета разметка через <> не действует).
P.P.S. Ещё может стоит-таки расшифровать что понимается под "неверно работает группировка в обной из таблиц.". Может проблема вообще не в запросе.
(28) Честно, я не понял как пользоваться скобочками. Видно придется мне подучиться хитростям СКД.
(29) Ваша статья натолкнула меня на эксперименты с запросом и - о чудо, - всё заработало.
Спасибо огромное всем.
(29) По ссылке "много буков не осилил".
Но судя по заголовку это какое-то очередное народное творчество, типа "оптимизации запроса" - нет способа запретить компоновщику макета "изменять" запрос.
Он ведь его генерирует.
Наверное если очень напрячься, можно существенно приблизиться к этому "запретить".
Но зачем?
Может лучше разобраться как нормально пользоваться инструментом, а не пытаться выровнять все углы под привычные 90 градусов?
В этой статье я расскажу про закладку «Другие настройки» в 1С СКД. Рассмотрим все параметры кроме тех, которые относятся к диаграмме.
Состав параметров зависит от уровня настройки. Параметры могут быть заданы для:
- Отчета в целом
- Для таблицы
- Для группировки (строк или колонок)
При установке какого либо параметра как обычно принято в СКД этот параметр наследуется с верхнего уровня на нижний, с уровня отчета в таблицу, с уровня таблицы на уровень группировки, с родительской группировки на подчиненную группировку. Наследование происходит в случае если у элемента структуры нижнего уровня параметр не установлен.
Итак, рассмотрим параметры по-порядку:
Макет оформления
Макет оформления отвечает за визуальное оформление структуры отчета. Если коротко, макет оформления это предустановленный набор правил оформления различных областей отчета – заголовков полей, ресурсов, итогов и т.д. Все что связано оформлением – цвет, шрифт, рамки и т.д. В этом параметре вы можете выбрать или типовой набор или свой собственный. Если этот параметр не установлен, используется «Основной» макет оформления. Есть возможность не использовать макет оформления вообще. Для этого нужно выбрать вариант «Без оформления» и тогда никакое оформление к ячейке табличного документа применяться не будет.
Количество записей
Параметр доступен только для группировок. В том числе для группировок строк и колонок таблицы. Если параметр задан, то выводятся не все записи группировки, а только указанное количество
Процент записей
Параметр доступен только для группировок. В том числе для группировок строк и колонок таблицы. Если параметр задан, то выводятся не все записи группировки, а только указанный процент от общего количества
Тип макета
Параметр доступен только для группировки. Не доступен для группировок строк и колонок таблицы. Отвечает за направление вывода ячеек записи группировки.
- Авто. Работает как горизонтально
- Горизонтально. Ячейки записи выводятся горизонтально
- Вертикально. Ячейки записи выводятся вертикально
Расположение итогов
Данный параметр имеет отношение к группировке. Чтобы понять смысл работы этого параметра нужно представить запись по группировке как итог по подчиненным группировкам (даже в том случае если подчиненных нет). Варианты значения параметра:
- Нет. Отключает вывод значений ресурсов.
- Начало. В начале выводится одна группировочная запись (для подчиненных)
- Начало и Конец. К группировочной записи в начале добавляется ее копия, но уже после всех записей подчиненных группировок (то есть в конце)
- Конец. Отключает вывод значений ресурсов в начальной записи. Но сама начальная запись добавляется
- Авто. Работает как «Начало»
Расположение полей группировок
Интересный параметр, который влияет на расположение подчиненной группировки относительно родительской. Причем действует этот параметр на группировки строк(или просто группировки без таблицы) и группировки по колонок по-разному.
Для группировок строк:
- Вместе. Работает как значение по умолчанию. Дочерняя группировка выводится под родительской группировкой в одной колонке
- Отдельно. Дочерняя группировка выводится в отдельной колонке. Значение родительских группировок дублируются для подчиненной.
- Отдельно и только в итогах. Дочерняя группировка выводится в отдельной колонке. Значение родительских группировок не дублируется для подчиненной
Для группировок колонок установка параметра работает похоже, но немного по другому. Если для группировок строк достаточно установить значение параметра для верхней группировки (или для отчета), то это значение распространяется на остальные подчиненные группировки. Для колонок этот принцип не работает. Не работает если установить параметр для отчета, для таблицы, для группировки первого уровня. Работает установка параметра начиная со второй (по вложенности) группировки. При этом значение параметра на следующие группировки не передается. И действует это значение не на подчиненную группировку, а на текущую. То есть :
- Вместе. Колонка текущей группировки выводится в той же строке что и родительская
- Отдельно. Колонка текущей группировки выводится на новой строке. Значение родительских группировок повторяется
- Отдельно и только в итогах. Колонка текущей группировки выводится на новой строке. Значение родительских группировок не повторяется.
Расположение группировок
Параметр работает в некотором смысле аналогично параметру «Расположение итогов», но есть отличия в работе значений:
- Нет. Полностью исключает записи данной группировки
- Конец. В отличие от параметра «Расположение итого» такое значение на самом деле отключает вывод начальной записи
Если у группировки действуют оба параметра «Расположение группировок» и «Расположение итогов», то результат их действия объединяется через «ИЛИ».
Расположение реквизитов
Параметр отвечает за вывод реквизитов полей входящих в состав группировки. Если у вас есть группировка по какому-то полю, то чтобы вывести реквизиты объекта из этого поля вам не обязательно включать их в группировку. Достаточно добавить их в выбранные поля (развернув объект) в списке они будут отображаться через точку. За то как будут выводится такие поля отвечает этот параметр:
- Вместе – все реквизиты выводятся в одной отдельной колонке вместе. Для каждой группировки своя отдельная колонка
- Отдельно – каждый реквизит выводится в отдельной колонке
- Вместе с владельцем – все реквизиты выводятся в колонке группировки. Это значение используется по умолчанию
- В отдельной позицици – все реквизиты выводятся в отдельной колонке, но колонка в отличие от значения «Вместе» одна для всех группировок
Расположение ресурсов
Параметр отвечает за вывод заголовков ресурсов и вывод ресурсов в строке
- Горизонтально (по умолчанию) – заголовки ресурсов выводятся в шапке (горизонтально). В строке группировки ресурсы выводятся также горизонтально
- Вертикально – заголовки ресурсов выводятся в отдельной колонке в строках группировок (вертикально). В строке группировки ресурсы выводятся вертикально
Расположение общих итогов (по вертикали / по горизонтали)
Параметр отвечает за вывод общих итогов. Для отчета и таблицы доступны варианты «по вертикали», «по горизонтали». При этом вариант «по горизонтали» имеет смысл только для группировок колонок таблицы. Для группировок колонок доступен только один вариант – «расположение общих итогов» и означает итоги по горизонтали, соответственно для группировок строк таблицы также доступен такой же один вариант и означает он итоги по вертикали. Для группировок без таблицы хоть и доступен вариант «по горизонтали», но имеет значение только вариант «по вертикали».
- Нет – итоги не выводятся
- Начало – итоги выводятся в начале
- Конец – итоги выводятся в конце (по умолчанию)
- Начало и конец – итоги выводятся в начале и в конце
- Авто – работает как «Конец»
Тип заголовка полей
Не совсем понятно как точно работает параметр, но в варианте «Полный» заголовок подчиненного реквизита выводится как «Владелец.Реквизит», в варианте «Краткий» выводится просто «Реквизит». Может еще на что-то влияет?
Выводить заголовок и Заголовок
Два параметра отвечают за вывод заголовка отчета, группировки, таблицы. Если параметр Выводить заголовок равен «Выводить», то выводится даже пустой заголовок. Если параметр имеет значение «Не выводить», то заголовок не выводится даже если задан. Если параметр имеет значение авто или не установлен, то заголовок выводится если заполнен и не выводится если не заполнен.
Выводить параметры
Параметр доступен только на уровне отчета. Отвечает за вывод значений параметров отчета. По умолчанию (и значение «Авто») параметры выводятся.
Выводить отбор
Параметр отвечает за вывод отбора. Доступен на уровне отчета, группировки. По умолчанию (и значение «Авто») отбор выводится
Автопозиция ресурсов
Параметр отвечает за позицию вывода ресурсов. Доступен для отчета, для таблицы, для группировок.
- Не использовать – колонки ресурсов выводятся так, как задано в списке «Выбранные поля» при этом учитываются только поля группировок и ресурсов
- После всех полей (по умолчанию) – колонки ресурсов выводятся после всех полей (группировок и реквизитов)
Фиксация слева и Фиксация сверху
Параметры доступны только для отчета. С помощью параметров можно отключить (по умолчанию включена) фиксацию слева (для таблиц) или сверху (и для таблиц и просто для группировок)
Редко какой отчет в 1С не использует отборы, разве что печатные формы и какие-то специальные отчеты. В большинстве отчетов в 1С требуется возможность выборочного анализа. Поэтому в этой статье мы поговорим про настройку отборов в отчетах, построенных с помощью 1С СКД.
После того как вы добавили наборы, определили ресурсы, задали структуру отчета с помощью группировок , можно приступать к настройке фильтров. В СКД это делается на закладке «Отбор», которая доступна или для всего отчета или для определенной группировки.
Новый элемент в список отбора можно добавить несколькими способами – двойной клик по доступному полю, перетаскивание, клавиша в меню:
При этом только через клавишу в меню можно добавить группу в отбор, которая объединяет элементы внутри этой группы по заданному условию (И, ИЛИ).
По умолчанию если элементы отбора не включены ни в какую группу и объединяются с помощью оператора «И».
Вид сравнения в элементе отбора зависит от типа поля (левого значения):
Операции доступные для числа:
Операции доступные для строки:
Для строки добавлены операции – «содержит», «начинается с», «соответствует шаблону» и те же операции с оператором «Не» (Не содержит и т.д.).
Операции доступные для ссылки:
Далее разберем типовые ситуации при использовании отбора
Самый простой вариант использование отбора – добавить фиксированный отбор, который будет действовать всегда (если конечно пользователь не изменит его в варианте отчета):
Обычно такие отборы имеет смысл переносить в текст запроса. Особенно в том случае, если пользователь не должен его менять вообще ни при каком условии.
Иногда в отчете на 1С СКД возникает необходимость исключить в отчете значения некоторых группировок (колонок или строк). Причем сделать это в запросе не представляется возможным, потому что исключать такие строки возможно только после компоновки.
В этом случае используется возможность СКД накладывать отборы на заданную группировку. Рассмотрим, например, такой отчет:
Допустим нам нужно исключить из отчета все строки, в которых итоговое количество по номенклатуре меньше 15. В запросе мы такое условие применить не можем. Установим для этого отбора для группировки «Номенклатура»:
Получим такой отчет:
Отборы на группировках часто используются в отчетах вида «Ведомость по остаткам»:
При использовании группировки по периоду (регистратору) в таких отчетах появляются строки, отвечающие за начальный остаток при использовании даты начала периода отличной от самой ранней. Чтобы убрать такие строки, можно использовать отбор на группировке по регистратору:
Чтобы убрать отбор, выделенный на рисунке на закладке «Другие настройки» для этой же группировки отключим вывод отбора:
Обычно мы редко используем фиксированные отборы. Чаще нам нужны отборы, которые может изменять пользователь. Можно, чтобы пользователь изменял отборы через функционал 1С СКД «Изменить вариант», но это не совсем верный путь – вариант отчета это скорее постоянный «скелет», который настраивается один раз и потом используется многократно. Отборы же это что-то часто изменяемое, поэтому правильнее редактировать их через механизм пользовательских настроек.
Итак, вернемся к нашему отчету. Допустим нам необходимо добавить в отчет отбор по группе номенклатуры (или по элементу) и чтобы этот отбор был доступен для изменения пользователем.
Добавим для этого отбор на уровне отчета. Вид сравнения по умолчанию сделаем «В группе», отключим по умолчанию использование отбора и в диалоге редактирования пользовательских настроек включим наш отбор в пользовательские настройки.
Перейдем теперь в режим предприятия.
Наш отбор доступен для редактирования на форме. За доступность прямо в форме отчета отвечает «Режим редактирования». Значение «Быстрый доступ» означает, что отбор доступен прямо на форме отчета. Если значение равно «Обычный», отбор доступен через кнопку «Настройки». Как видно на рисунке пользователь может выбирать вариант сравнения, управлять действием (включен / отключен) отбора.
Если вам необходимо установить фиксированный отбор (вид сравнения и правое значение константы), но пользователь должен управлять включением / отключением отбора, тогда вам необходимо заполнить представление отбора в пользовательской настройке:
В этом случае в настройки добавляется только флаг использования отбора, которым может управлять пользователь:
Если вам в отборе нужно изменить представления поля, по которому делается отбор, то для этого есть еще одно представление:
Получается вот так:
Мы можем вывести все отборы для редактирования пользователем. Для этого на уровне отчета вызовем диалог редактирования пользовательских настроек:
То же самое можно сделать на уровне любой группировки, если нужно, чтобы была возможность редактирования отборов для заданной группировки. В режиме предприятия это выглядит следующим образом:
Как известно, в 1С СКД используется не только в отчетах, но и в формах, содержащих динамические списки. У динамического списка есть несколько свойств, которые относятся к СКД. Среди этих свойств имеется свойство «Отбор» с типом «ОтборКомпоновкиДанных». Чтобы установить отбор в динамическом списке есть два способа. Первый способ – передать отборы через параметр формы с одноименным названием – «Отбор». Этот параметр является структурой, в которой ключ ссылается на поле, для которого устанавливается отбор. Значение же содержит данные, с которыми производится сравнение. Можно также передать в качестве правого значения – массив, фиксированный массив, список значений. В этом случае вид сравнения равняется «ВСписке», для одиночного элемента вид сравнения устанавливается как «Равно». Этот способ ограничен в возможностях – с его помощью нельзя накладывать сложные условия с операторами «И» и «ИЛИ», нельзя использовать виды сравнения кроме двух указанных.
Отбор, установленный таким образом, передается в фиксированные настройки компоновщика настроек, связанного с динамическим списком. Он не виден пользователю и недоступен для изменения.
Второй способ – непосредственное редактирование отбора в динамическом списке или в компоновщике. Обычно в типовых конфигурация для этого есть ряд методов и функций для установки таких отборов.
Например, вызов основного метода для установки отбора выглядит так:
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, «Ссылка», Параметры.ДобавитьДля, ВидСравненияКомпоновкиДанных.НеРавно);
Данная функция производит поиск существующего элемента отбора, изменяет его если нашла, а если не нашла, то добавляет с помощью такой процедуры:
В форме содержащей динамический список также как в отчете на СКД, возможно настроить пользовательский отбор. Как это можно сделать показано на рисунке:
Также у элемента формы, с которым связан список нужно установить группу пользовательских настроек, в которой будут отображаться настройки для пользователя:
Странности начались когда мы перешли на 8.3(8.3.3.687) Когда было 8.2 отчеты работали как часы, к ним никто не лез т.е. человеческий фактор можно исключить, после перехода на 8.3 отчеты выдают чистый лист, хотя данные есть (я запрос из СКД исполнял в консоле запросов). Как я это делал: В модуле объекта отчета в процедуре ПриКомпоновкеРезультата получаю код запроса который генерит СКД, беру его из "СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос" вставляю в консоль запросов, консоль выдает данные, почему же СКД выдает чистый лист? P.S. Отбор в СКД никакой не установлен
какие настройки (которые могут повлиять на результат) могли слететь, если б настройки группировки слетели я б данные видел в любом случаи, а тут вообще нет данных, отбор я специально убрал (для чистоты эксперемента)
на закладке настройки есть что нибудь? Если там ничего не будет - то и данных не будет выведено. Оставь там только детальные записи, без группировок, выведет что нибудь?
вот что на закладке "настройки" "Оставь там только детальные записи, без группировок" не понял где это сделать?
группировка задается программно на форме отчета пользователь проставляет галки как он хочет группировать. P.S. сорри за то что задержался с ответом
А где в Компоновщике настроек можно посмотреть данные ко каким производится группировка, я в отладчике смотрю отчет.КомпоновщикНастроек, но там куча всего, Настройки, ПользовательскиеНастройки, ФиксированыеНастройки
тут видно что просто есть группировка, а надо еще глянуть какие поля должны выводится под этой группировкой
тут проблема более глубокая, более местическая так сказать, т.к. есть база с такой же конфой, но там эти отчеты работают, отчеты 1 в 1 такие же (с точки зрения конфигурации)
Чисто "семёрочный" подход. Пора переучивать пользователей. Не изобретай велосипед. Сделай все нужные группировки предварительно. А затем пользователь пусть сам решает, через "Все действия - Изменить вариант".
согласен, но не я это решаю, да и не это является причиной поломки отчета. Я сейчас ковыряю "Все действия - Изменить вариант" все там нормально, как на форме выбрать группировку так в Изменить вариант и отображается, пробовал прям там редактировать, ему пофиг (( P.S. у нас на базе включено разделение данных, по идеи какая разница но я уже не знаю на что смотреть и что может быть причиной.
на скрине видно группировку. а если зайти дальше, то в поле выбор должны быть перечислены поля, которые выводить в отчет. Вы ж программно группировки создаёте
а если вариантов группировки 5 - 6 и разный порядок следования, то что для каждого варианта сохранять настройку
разве это "семёрочный" подход разместить на форме отчета список значений с группировками и исходя из отмеченного пользователем программно формировать отчет?
По-моему трабл в том что настроики варианта где-то кешируются, я убрал код который динамически сознает группировки, заполняет значение параметров, вообще все что не стандартно, изменяю макет, присваиваю значение параметра в макете и создаю там группировку, запускаю мне отчет орет что не заполнено значение параметра (вариант выбран основной), захожу в изменить вариант, и действительно не заполнен нужный параметр, а вот какого х он не заполнен, загадка, в макете для варианта "Основной" я параметр заполнен, кстате и группировки нет если смотреть в изменить вариант, как сказать отчету что бы он взял настройки макета такие как я задал в конфигураторе?
Есть ещё пользовательские настройки. Они сильнее, чем те, что заданы в схеме. Их-то СКД и подгружает из кэша.
так он не воспринимает ни фига если я вношу изменения в "изменить вариант" если выгрузить настройки в файл из конфигуратора и загрузить их в предприятии, то он съедает настройки и все ок, и дальше если я их правлю то изменения тоже видны, но это на корню рубит то что у нас в отчет натройки программно задаются
Я программно подставлял значения параметров в ПриЗагрузкеВариантаНаСервере. Если этого не делать, то параметры не инициализировались. К примеру, так:
Это правда для случая "своей" формы для отчёта на СКД. Для случая полностью программно нарисованного отчёта на СКД играют пользовательские настройки.
на третий день проблему удалось решить. У меня при загрузке варианта вызывались процедуры которые переносили настройки с формы в макет, там обращение было к Отчет.КомпоновщикНастроек.Настройки.Структура, а надо было к настройкам которые приходят праметром в ПриЗагрузкеВариантаНаСервере. 8.3 оказалась привередливой в этом вопросе.
Читайте также: