Имя: Пароль:
1C
1С v8
Как в СКД задать сложный отбор
0 sidalexsandr
 
07.04.17
12:28
Требуется в системе компоновки данных задать отбор по Организации двух видов:

1) указана конкретная организация, тогда отбор по ней
2) не указана организация, тогда отбор отключен и выводится по всем организациям

Вопрос: как сделать такой отбор?
1 catena
 
07.04.17
12:30
Отбор в СКД по-умолчанию так и работает...
2 jsmith82
 
07.04.17
12:31
убрать организацию из условия ГДЕ в тексте запроса и выставить на закладке Отбор страницы Настройки
3 sidalexsandr
 
07.04.17
13:14
(2) У меня так и установлено. Но когда не указываю организацию отчет пустой.
4 jsmith82
 
07.04.17
13:16
(3) Флажок стоит?
5 sidalexsandr
 
07.04.17
13:18
(4) Флажок стоит
6 PCcomCat
 
07.04.17
13:20
программно снимать флажок, если не заполнено значение.
7 sidalexsandr
 
07.04.17
13:20
(4) Спасибо. Всё получилось. Ветку можно закрывать.
8 sidalexsandr
 
07.04.17
13:21
(6) Это как?
9 PCcomCat
 
07.04.17
13:30
(8) Вот так, например:

    Для каждого Параметр из КопияНастроек.Элементы цикл
        ПараметрСКД = ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(Параметр.Параметр);
        
        ПараметрСКД.Использование = ЗначениеЗаполнено(ПараметрСКД.Значение);
    КонецЦикла;
10 sidalexsandr
 
07.04.17
13:31
(9) Куда это писать?
11 PCcomCat
 
07.04.17
13:32
На кнопку навешиваешь обработчик, в котором пишешь и потом компонуешь результат.
12 sidalexsandr
 
07.04.17
13:33
(11) Спасибо. Где обработчик?
13 Михаил Козлов
 
07.04.17
13:35
(9) А если нужно получить данные по незаполненному "измерению"?
14 PCcomCat
 
07.04.17
13:36
Точнее вот так:

    Для каждого Параметр из КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы цикл
        ПараметрСКД = ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(Параметр.Параметр);
        
        ПараметрСКД.Использование = ЗначениеЗаполнено(ПараметрСКД.Значение);
    КонецЦикла;
15 PCcomCat
 
07.04.17
13:36
(13)В смысле? Не понимаю...
16 Михаил Козлов
 
07.04.17
13:40
(15) Ну, например, получить обороты по пустой серии?
17 PCcomCat
 
07.04.17
13:41
(16) Всё зависит от частного случая решения задачи.

Вот из того же моего отчета:
        Если Не ЗначениеЗаполнено(ПараметрСКД.Значение) тогда
            Если СокрЛП(ПараметрСКД.Параметр)="СписокУчастковПроверкиЗаполненностиДатыГотовности" или СокрЛП(ПараметрСКД.Параметр)="ВариантОтчета" тогда
                ПараметрСКД.Использование = Истина;
            Иначе
                ПараметрСКД.Использование = Ложь;
            КонецЕсли;
        КонецЕсли;
18 PCcomCat
 
07.04.17
13:43
+(17) Я решаю за пользователя, как можно формировать отчет, т.к. знаю, что конкретно можно получить в том или другом случае.

Возможно, есть более изящные решения. Но мне другое не помогало...
19 Windyhead
 
07.04.17
13:57
(0) А конфа какая ? А то может и не надо это все городить и обойтись быстрым доступом к пользовательским настройкам.
20 SleepyHead
 
гуру
07.04.17
14:08
А что так сложно - то? в запросе условие на организацию не накладывать, в СКД сделать отбор по организации.

Если отбор включен, СКД автоматически доработает текст запроса так, чтобы был фильтр по организации.
21 Windyhead
 
07.04.17
14:11
(20) Все правильно но если еще и конфа на УФ, то и нефиг форму рисовать, достаточно в отборах скд поставить флажок пользовательской настройки и быстрый доступ.
А если там еще и БСП "Варианты отчетов" есть то вообще все красиво будет )))