Вопрос-ответ Отзывов (4) В закладки
Подскажите, пожалуйста, как программно в СКД в отборе создать группу ИЛИ?
Нет похожих статей
Свойство родитель доступно только для чтения! Есть какие нибудь ещё варианты для создания отбора с признаком ИЛИ программно?
Вдруг кому пригодится
Элементы = КомпоновщикНастроек.Настройки.Отбор.Элементы;
ГруппаОтбора = Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ГруппаОтбора.Использование = Истина;
ПервыйОтборГруппы = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
//ПервыйОтборГруппы.Родитель = ГруппаОтбора;
ПервыйОтборГруппы.Использование = Истина;
ПервыйОтборГруппы.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Поле1");
ПервыйОтборГруппы.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ПервыйОтборГруппы.ПравоеЗначение = ЗначениеОтбора1;
ВторойОтборГруппы = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
//ПервыйОтборГруппы.Родитель = ГруппаОтбора;
ВторойОтборГруппы.Использование = Истина;
ВторойОтборГруппы.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Поле2");
ВторойОтборГруппы.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ВторойОтборГруппы.ПравоеЗначение = ЗначениеОтбора2;
1. Пользовательские настройки СКД
При программном заполнении параметров отчета СКД часто возникает ситуация, когда нужно программно установить параметры отчета или добавить отборы.
Проблема возникает в том, что не всегда эти параметры или отборы отображаются на форме так, как нам бы хотелось.
В общем случае, для того, чтобы открыть отчет с заполненными параметрами используется следующая конструкция:
В данной статье описаны примеры того, как нужно заполнять параметры СКД, чтобы они отображались на форме так, как нужно, а именно Настройки и ПользовательскиеНастройки компоновщика данных.
1.1. Установка пользовательских параметров СКД
Для установки значения параметра обычно используется такая конструкция:
Данный код установит значение параметра, но при заполнении отчета переданными настройками значение параметра не отобразится на форме и реквизит будет пустым.
Для того, чтобы пользователь видел значение параметра на форме нужно добавить следующую конструкцию:
Данный код по значению идентификатора пользовательской настройки находит элемент этой настройки и устанавливает значение параметра еще и там.
1.2. Установка пользовательских отборов СКД
1.2.1. Пример открытия отчета с фиксированным отбором
В общем случае для того, чтобы открыть отчет с отбором можно использовать следующие конструкции
В данном случае форма откроется с отбором, но отбор не будет доступен для редактирования.
1.2.2. Пример открытия отчета с пользовательским отбором
Для того, чтобы отбор появился на форме и был доступен как в быстры отборах, так и на вкладке "отбор", нужно использовать следующую конструкцию:
В данном случае ненужно заполнять отбор обычных настроек компоновщика (так как в таком случае элементы формы будут задублированы), нужно взять из настроек идентификатор пользовательских настроек и по нему найти их.
После чего добавить отбор в пользовательские настройки. Он появится на форме, в быстрых настройках СКД, и на вкладке "Отборы".
Если пользовательские отборы нужно объединить в группу отборов ("И", "Или", "Не"), тогда нужно сначала добавить группу пользовательского отбора:
У группы отборов есть свойство "Элементы", чтобы элемент отбора был подчинен данной группе (находился в этой группе) Отбор нужно добавлять именно в эту группу.
Специальные предложения
по-моему, в СП и любой типовой в общем модуле по СКД примеров гораздо больше.
хотя спасибо за то, что скопировали пару строк кода из первой попавшейся формы или модуля.
(1) Вы не поверите. Нету там ничего. В своё время решал похожую задачу, отладчик замучал (но решил).
(7) откройте общий модуль ОбщегоНазначенияКлиентСервер изучайте примеры, а если проискать по общим модулям "Отбор", то можно еще найти примеры.
А в примерах автора топика я не увидел, что есть хоть намек на иерархии, а в настойках иерархия сплошь и рядом.
Опять ИТС и БСП перепечатывают.
(4)Я не претендовал на то, что это статья уникальна в своем роде. На ИТС по вашей ссылке описан один из методов БСП, если хотите, то в данной статье просто показано, как это работает внутри.
П.С. Если не интересно, то можно всегда пройти мимо =)
Спасибо большое за подсказку — тоже потерял кучу времени на этом.
Это про какую конфу, вид клиента? Где этот код расположен? в форме / в модуле, сервер / клиент, обычное приложение / управляемое? Конфа с БСП / без БСП?
где можно применить эти советы?
(5) В самом начале есть пример кода, который открывает отчет СКД с параметрами.
Все чего там не хватает это
Отчет = Отчеты.муОтчет.СоздатьОбъект();
КомпоновщикНастроек = Отчет.КомпоновщикНастроек;
В другие примерах речь как раз идет о том, как заполнить компоновщик настроек, чтобы отборы были такими, какими ожидает их видеть пользователь.
Вернемся к вашим вопросам.
1. "Это про какую конфу". Это про любую конфу, т.к. речь идет о механизмах платформы 1с 8.3
2. "Вид клиента". Естественно, что объект вы создаете на сервере, а открываете отчет на клиенте (у данной статьи нет цели рассказывать про клиент серверную архитектуру)
3. "Где этот код расположен". В месте, где вам нужно открыть отчет =)
4. "обычное приложение / управляемое?". Управляемое приложение
5. "Конфа с БСП / без БСП". Без разницы, это не функционал БСП.
П.С. По-моему часть ваших вопросов только ради вопросов.
неее, просто мне задача такая часто попадается, и поэтому очень интересно, т.к. каждый раз как в первый раз трачу кучу времени в отладчике, чтобы понять, куда программно вставить значение, чтобы все красиво было. С nой попытки я нахожу куда сунуть настройки, чтобы работало, а с nХ2 — чтобы и отображалось корректно. И везде все решается по разному.
Например сейчас я ковыряюсь в старушке УПП, в которой кучка отчетов на СКД. И надо открывать эти отчеты с уже установленными настройками. Это обычные формы и там пользовательские настройки храняться и отображаются совсем другими механизмами, там для каждого варианта есть элемент справочника, где в хранилище значений лежат настройки и не только СКДшные. Там пользовательские настройки реализованы отдельно от того, что есть в платформе.
Ранее еб***ся с УТ 11.4. Там вроде СКД и УФ, но не совсем, т.к. есть БСП и общая формаОтчета с кучей кода в своем модуле и мне было очень грустно его читать, чтобы открыть отчет в котором на форме все красиво.
Из Вашего ответа я понял, что в УТ 11 я смогу протестить этот код и если все получиться "намотать на ус"
Рассмотрим еще одну интересную возможность отборов в СКД, а именно групповые условия.
Предположим, нас интересует, какие позиции залеживаются на складе. Сформулируем словие так: «Номенклатура, по которой был приход за период и остатки по которой на конец периода более 3 единиц или сумма остатка более 5000 рублей».
Для того чтобы ввести в отбор логическое «ИЛИ» необходимо добавить группу «Или». В панели отбора вызовем контекстное меню и выберем пункт Новая группа.
В новом поле выберем значение Группа Или. Выделив эту группу и используя контекстное меню, добавим в эту группу условия «Количество конечный остаток больше 3» и «Сумма конечный остаток больше 5000». Далее в корень отбора добавим условие «Количество приход больше 0». Панель отбора в результате будет выглядеть примерно так: