|   |   | 
| 
 | Отбор по типу документа в запросе | ☑ | ||
|---|---|---|---|---|
| 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) Всем спасибо за подсказку!     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |