Имя: Пароль:
1C
1С v8
Отбор по типу документа в запросе
0 Morozov Roman
 
08.11.22
07:42
Здравствуйте! Кто может подсказать, нужен отчет по документам (не по регистру), в нем 6 документов должна быть возможность у пользователя делать отбор по типу документа, если отбор не указан тогда выводить результат по всем документам в запросе, платформа 8.2, пытаюсь сделать на СКД,

ВЫБРАТЬ
    РеализацияТоваровУслуг.Ссылка,
    РеализацияТоваровУслуг.Дата КАК Дата,
    РеализацияТоваровУслуг.СуммаДокумента,
    РеализацияТоваровУслуг.Контрагент КАК Контрагент
ПОМЕСТИТЬ ВТ_Документы
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
    РеализацияТоваровУслуг.Проведен = ИСТИНА
    И РеализацияТоваровУслуг.ПометкаУдаления = ЛОЖЬ
    И РеализацияТоваровУслуг.Дата МЕЖДУ &Дата1 И &Дата2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ОплатаОтПокупателяПлатежнойКартой.Ссылка,
    ОплатаОтПокупателяПлатежнойКартой.Дата,
    ОплатаОтПокупателяПлатежнойКартой.СуммаДокумента,
    ОплатаОтПокупателяПлатежнойКартой.Контрагент
ИЗ
    Документ.ОплатаОтПокупателяПлатежнойКартой КАК ОплатаОтПокупателяПлатежнойКартой
ГДЕ
    ОплатаОтПокупателяПлатежнойКартой.ПометкаУдаления = ЛОЖЬ
    И ОплатаОтПокупателяПлатежнойКартой.Проведен = ИСТИНА
    И ОплатаОтПокупателяПлатежнойКартой.Дата МЕЖДУ &Дата1 И &Дата2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ПриходныйКассовыйОрдер.Ссылка,
    ПриходныйКассовыйОрдер.Дата,
    ПриходныйКассовыйОрдер.СуммаДокумента,
    ПриходныйКассовыйОрдер.Контрагент
ИЗ
    Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
ГДЕ
    ПриходныйКассовыйОрдер.ПометкаУдаления = ЛОЖЬ
    И ПриходныйКассовыйОрдер.Проведен = ИСТИНА
    И ПриходныйКассовыйОрдер.Дата МЕЖДУ &Дата1 И &Дата2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    РасходныйКассовыйОрдер.Ссылка,
    РасходныйКассовыйОрдер.Дата,
    РасходныйКассовыйОрдер.СуммаДокумента,
    РасходныйКассовыйОрдер.Контрагент
ИЗ
    Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер
ГДЕ
    РасходныйКассовыйОрдер.ПометкаУдаления = ЛОЖЬ
    И РасходныйКассовыйОрдер.Проведен = ИСТИНА
    И РасходныйКассовыйОрдер.Дата МЕЖДУ &Дата1 И &Дата2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ПлатежноеПоручениеВходящее.Ссылка,
    ПлатежноеПоручениеВходящее.Дата,
    ПлатежноеПоручениеВходящее.СуммаДокумента,
    ПлатежноеПоручениеВходящее.Контрагент
ИЗ
    Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее
ГДЕ
    ПлатежноеПоручениеВходящее.ПометкаУдаления = ЛОЖЬ
    И ПлатежноеПоручениеВходящее.Проведен = ИСТИНА
    И ПлатежноеПоручениеВходящее.Дата МЕЖДУ &Дата1 И &Дата2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ВозвратТоваровОтПокупателя.Ссылка,
    ВозвратТоваровОтПокупателя.Дата,
    ВозвратТоваровОтПокупателя.СуммаДокумента,
    ВозвратТоваровОтПокупателя.Контрагент
ИЗ
    Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя
ГДЕ
    ВозвратТоваровОтПокупателя.Проведен = ИСТИНА
    И ВозвратТоваровОтПокупателя.ПометкаУдаления = ЛОЖЬ
    И ВозвратТоваровОтПокупателя.Дата МЕЖДУ &Дата1 И &Дата2
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Документы.Ссылка,
    ВТ_Документы.Дата,
    ВТ_Документы.Контрагент,
    ВТ_Документы.СуммаДокумента
ИЗ
    ВТ_Документы КАК ВТ_Документы
ГДЕ
    ВТ_Документы.Ссылка = &Ссылка
1 SleepyHead
 
гуру
08.11.22
07:45
Где ТипЗначения(ВТ_Документы.Ссылка)=Тип(Документ.хххх)
2 Morozov Roman
 
08.11.22
07:52
(1) Пробовал, в результат попадают только документы реализации, ну или того документа, который указываешь  в = ТИП(Документ.xxxx)
3 Morozov Roman
 
08.11.22
07:53
(1) Возможности выбора нет
4 DrZombi
 
гуру
08.11.22
08:03
(3) Пример, как быть... до конца писать самому :)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    РасходныйКассовыйОрдер.Ссылка,
    РасходныйКассовыйОрдер.Дата,
    РасходныйКассовыйОрдер.СуммаДокумента,
    РасходныйКассовыйОрдер.Контрагент
ИЗ
    Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер
ГДЕ
    РасходныйКассовыйОрдер.ПометкаУдаления = ЛОЖЬ
    И РасходныйКассовыйОрдер.Проведен = ИСТИНА
    И РасходныйКассовыйОрдер.Дата МЕЖДУ &Дата1 И &Дата2
    И &ОтборДокумента_РКО = Истина

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ПлатежноеПоручениеВходящее.Ссылка,
    ПлатежноеПоручениеВходящее.Дата,
    ПлатежноеПоручениеВходящее.СуммаДокумента,
    ПлатежноеПоручениеВходящее.Контрагент
ИЗ
    Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее
ГДЕ
    ПлатежноеПоручениеВходящее.ПометкаУдаления = ЛОЖЬ
    И ПлатежноеПоручениеВходящее.Проведен = ИСТИНА
    И ПлатежноеПоручениеВходящее.Дата МЕЖДУ &Дата1 И &Дата2
    И &ОтборДокумента_ППВ = Истина
5 Ryzeman
 
08.11.22
08:04
(3) Ну, сам мог догадаться как переделать. Выводи в запросе ТипЗначения(ВТ_Документы.Ссылка) КАК ВидДокумента отдельным полем в СКД,
затем включай в пользовательский отбор ВидДокумента
6 DrZombi
 
гуру
08.11.22
08:05
+(4) (0) в отчете, перед тем как выполнить запрос:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    //привилегированный режим...
    //УстановитьОтключениеБезопасногоРежима(Истина);
    //УстановитьПривилегированныйРежим(Истина);
    
    СтандартнаяОбработка=Ложь;
    
    //Поменяем текст запроса, на правильный...
    //СхемаКомпоновкиДанных.НаборыДанных.ОсновнойНабор.Запрос = ПолучитьТекстЗапроса_ОсновнойНабор();    
    
    //Параметры.
    ПользМодиф = Ложь; //Если нужно...
    
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    
    //Тут установка ваших параметров по условию, который вы выведите пользователю в диалоге...
    
    КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
    Если ПользМодиф = Истина Тогда
        ЗаполнитьПользовательскиеНастройки(Настройки, КомпоновщикНастроек.ПользовательскиеНастройки);
        //КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(КомпоновщикНастроек.ПользовательскиеНастройки);
        //КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("ПользовательскиеНастройкиМодифицированы",Истина);
    КонецЕсли;
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки,,);
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки,Истина);
    
    Результат = Новый ТабличныйДокумент;
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(Результат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
    
    ДокументРезультат.Вывести(Результат);
    
    
    //ПарамВкл = Неопределено;
    //ФиксацияСверху = ПолучитьЗначениеПараметра(Настройки,"ФиксацияСверху",0, ПарамВкл);
    //
    //Если ПарамВкл <> Неопределено и ПарамВкл = Истина и ФиксацияСверху > 0 Тогда
    //    ДокументРезультат.ФиксацияСверху = ФиксацияСверху;    
    //КонецЕсли;
    
    
КонецПроцедуры
7 DrZombi
 
гуру
08.11.22
08:06
+(6) (0)  ЗаполнитьПользовательскиеНастройки....


Процедура ЗаполнитьПользовательскиеНастройки(НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД)
    
    Для Каждого СледПараметр Из НовыеНастройкиКД.ПараметрыДанных.Элементы Цикл
        Если Не ПустаяСтрока(СледПараметр.ИдентификаторПользовательскойНастройки) Тогда
            ПользовательскийПараметр = НовыеПользовательскиеНастройкиКД.Элементы.Найти(СледПараметр.ИдентификаторПользовательскойНастройки);
            Если ТипЗнч(ПользовательскийПараметр) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
                ПользовательскийПараметр.Значение = СледПараметр.Значение;
                ПользовательскийПараметр.Использование = СледПараметр.Использование;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры
8 Ryzeman
 
08.11.22
08:06
(4) если по красоте делать, тогда уж через язык расширения СКД
{Где ТипЗначения(ВТ_Документы.Ссылка)=Тип(Документ.хххх)}
А ПриКомпоновкеДанных уже проверять указали или нет этот обор
9 Ryzeman
 
08.11.22
08:06
(8) {Где ТипЗначения(ВТ_Документы.Ссылка)=&ВыбранныйТипДокумента}
10 DrZombi
 
гуру
08.11.22
08:09
(0) Держи еще наработки процедурок для отчетов на СКД :)


Функция ПолучитьЗначениеПараметра(Настройки_Основные,ИмяПараметра,ЗначениПоУмолчанию,ПараметрВключен=Ложь)
    
    РезФункц = ЗначениПоУмолчанию;
    
    НайденПараметр = Настройки_Основные.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
    Если НайденПараметр <> Неопределено Тогда
        РезФункц = НайденПараметр.Значение;
        ПараметрВключен = НайденПараметр.Использование;
    КонецЕсли;
    
    Возврат РезФункц;
КонецФункции

Процедура УстановитьПараметр(Настройки_Основные,ИмяПараметра,Знач ЗначениеПоУмолчанию, Знач УстановитьНовоеЗначение=Ложь,
                            пПользовательскиеНастройкиМодифицированы=Ложь, ВозвращаемоеЗначениеПараметра=Неопределено)
    
    НайденПараметр = Настройки_Основные.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
    Если НайденПараметр = Неопределено Тогда
        ВозвращаемоеЗначениеПараметра = ЗначениеПоУмолчанию; //Не нашли, но вернем его...
        Возврат;
    КонецЕсли;
    
    пЗначение = НайденПараметр.Значение;
    Если УстановитьНовоеЗначение = Истина или Не ЗначениеЗаполнено(пЗначение) Тогда
        НайденПараметр.Значение = ЗначениеПоУмолчанию;
        пЗначение = ЗначениеПоУмолчанию;
    КонецЕсли;
    
    ВозвращаемоеЗначениеПараметра = пЗначение;
    
    НайденПараметр.Использование = Истина;
    
    //Для пользовательского интерфейса...
    ПользовательскийПараметр = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(НайденПараметр.ИдентификаторПользовательскойНастройки);
    Если ТипЗнч(ПользовательскийПараметр) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
        ПользовательскийПараметр.Значение = пЗначение;
        ПользовательскийПараметр.Использование = Истина;
        
        пПользовательскиеНастройкиМодифицированы = Истина;
    КонецЕсли;
    
КонецПроцедуры
11 DrZombi
 
гуру
08.11.22
08:09
(8) Да как то ему еще пользователю надо интерфейс организовать, ваш вариант не то что бы не то, но ему нужен список с галочками :)
12 DrZombi
 
гуру
08.11.22
08:11
+(10) (0) Пример, как пользоваться :)


    ПользМодиф = Ложь; //Если нужно...
    Настройки = НовыеНастройкиКД; //КомпоновщикНастроек.ПолучитьНастройки();
    
    ПараметрВключен = Неопределено; //Если вернет логику, то значит параметр есть и найден...
    Диспетчер = ПолучитьЗначениеПараметра(Настройки,"Диспетчер",Справочники.Диспетчеры.ПустаяСсылка(),ПараметрВключен);
    
    Если Не ЗначениеЗаполнено(Диспетчер) Тогда
         Диспетчер = ПараметрыСеанса.ТекущийДиспетчер;
    КонецЕсли;
    ЗначениеПараметра = Диспетчер;
    УстановитьПараметр(НовыеНастройкиКД,"Диспетчер",ЗначениеПараметра,Истина,ПользМодиф);
13 Фрэнки
 
08.11.22
08:15
Выше дали рекомендации, как переделать вручную, т.е. кодом.

А в топике сказано на СКД, что видимо означает решить задачу только конструктором.

неудобно тут рассказывать и показывать :-)

Вот есть ссылка (нагуглил, не моя) https://helpf.pro/faq/view/743.htm

Там в конструкторе запроса на СКД есть вкладочка еще одна.
пункт 8. Компоновка данных.
Если этой закадкой пользоваться с вкладками Поля и Условия.
То в результате построения запроса будет конструкция с такими скобками {...}

Ну а если так не получится, то тогда программно, как выше примеров накидали.
14 Morozov Roman
 
10.11.22
07:27
(13) (12) (8) (1) Всем спасибо за подсказку!