|
помогите создать отбор | ☑ | ||
---|---|---|---|---|
0
potapovsanek1989
14.11.13
✎
10:46
|
Подскажите пожалуйста как программно создать множественный и единичный отбор в отчете.
Отчет сделал без скд и построителя. Макетом и выводил области. Создал в отчете реквизит тип выбрал отбор. Потом создал табличное поле в данных выбрал реквизит отбор . В запросе получал сотрудников,подразделение, контрагент . Обычные формы платформа 8.2 |
|||
1
Ewgen_R
14.11.13
✎
10:50
|
Зачем изобретать велосипед с квадратными колесами?
|
|||
2
Wobland
14.11.13
✎
10:54
|
сесть на берегу реки поздней весной и предаться медитации. через 3 дня в мозгу должны образоваться три буквы: С, К и Д
|
|||
3
potapovsanek1989
14.11.13
✎
10:56
|
отчет слишком сложный ,в скд не получилось,да и в построитель переделывать долго
|
|||
4
Wobland
14.11.13
✎
10:57
|
Ученик спросил учителя: "Вот программист, что никогда не проектирует, не сопровождает и не отлаживает свои программы. Однако все, кто его знают, считают его одним из лучших программистов в мире. Почему так?".
Учитель ответил: "Этот программист овладел Дао. Он ушел от нужды проектирования; он не сердится, если система падает, он принимает вселенную такой какая она есть. Он ушел от нужды сопровождения; ему безразлично, увидит ли кто-нибудь его код. Он ушел от нужды отладки; каждая из его программ совершенна изнутри, изящна и ясна, и ее цель самоочевидна. Поистине он постиг тайну Дао." |
|||
5
MSII
14.11.13
✎
10:59
|
(3) У тебя же в результате все равно получается таблица значений. Вот ее и пихай в СКД, вопрос с отборами решится.
|
|||
6
samozvanec
14.11.13
✎
11:00
|
(4) "Дао" читать "СКД"?)
|
|||
7
potapovsanek1989
14.11.13
✎
11:01
|
у меня получаетья отчет строиться по периодам ,для одного периода один запрос,когда больше периодов то другой
|
|||
8
Kalac
14.11.13
✎
11:02
|
юзай СКД. А то сейчас налепишь чуши
|
|||
9
potapovsanek1989
14.11.13
✎
11:07
|
Без скд кто нибудь знает как?
|
|||
10
Wobland
14.11.13
✎
11:07
|
(6) если ты можешь назвать дао, ты не познал дао
|
|||
11
Kalac
14.11.13
✎
11:07
|
Отчет не сложный. Используешь динамический список периоды и по нему строишь отчет запросом и настройками скд
|
|||
12
Wobland
14.11.13
✎
11:08
|
(9) отринь мирское
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка=Ложь; НачалоПериода='00010101'; КонецПериода=ТекущаяДата(); Настройки=КомпоновщикНастроек.ПолучитьНастройки(); // Получаем настройки отчета ПараметрНачалоПериода=Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериода"); Если ПараметрНачалоПериода<>Неопределено И ПараметрНачалоПериода.Использование Тогда НачалоПериода=ПараметрНачалоПериода.Значение.Дата; КонецЕсли; ПараметрКонецПериода=Настройки.ПараметрыДанных.Элементы.Найти("КонецПериода"); Если ПараметрКонецПериода<>Неопределено И ПараметрКонецПериода.Использование Тогда КонецПериода=КонецДня(ПараметрКонецПериода.Значение.Дата); КонецЕсли; Результат=ПолучитьРезультат(НачалоПериода, КонецПериода); //сложная и мудрёная ТЗ //Результат=ПолучитьРезультат('20130401', '20130401235959'); ДанныеРасшифровки=Новый ДанныеРасшифровкиКомпоновкиДанных; // Создаём данные расшифровки КомпоновщикМакета=Новый КомпоновщикМакетаКомпоновкиДанных; // Создаём компоновщик макета // Инициализируем макет компоновки, используя схему компоновки данных // и созданные ранее настройки и данные расшифровки СхемаКомпоновкиДанных=ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); МакетКомпоновки=КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); // Скомпонуем результат ПроцессорКомпоновки=Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, Новый Структура("Результат", Результат), ДанныеРасшифровки); ДокументРезультат.Очистить(); // Выводим результат в табличный документ ПроцессорВывода=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); КонецПроцедуры |
|||
13
Kalac
14.11.13
✎
11:11
|
Вобщем делай на СКД иначе колхоз
|
|||
14
George Wheels
14.11.13
✎
11:11
|
(9) Если без СКД, то все отборы делаешь в запросе или в ТЗ.
|
|||
15
Kalac
14.11.13
✎
11:15
|
Он не знает хочет чтобы мы за него всё написали?
|
|||
16
Kalac
14.11.13
✎
11:18
|
Вообще есть один код где то похожий. Могу скинуть
|
|||
17
potapovsanek1989
14.11.13
✎
11:18
|
еслиб знал не спрашивал,тебя не заставляют
|
|||
18
Kalac
14.11.13
✎
11:18
|
Надо?
|
|||
19
Kalac
14.11.13
✎
11:19
|
как знаешь. ну тогда читай Хрусталеву
|
|||
20
potapovsanek1989
14.11.13
✎
11:22
|
Кидай пример
|
|||
21
Wobland
14.11.13
✎
11:24
|
(20) а можно я?
|
|||
22
Kalac
14.11.13
✎
11:24
|
Процедура ОбновитьФормуТиповогоОтчетаПоКомпоновщику(ОтчетОбъект, ФормаОтчета) Экспорт
Если ЭтоСтараяВерсияОтчета(ОтчетОбъект) Тогда // Параметры периода ЗначениеПараметраНачалоПериода = ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НачалоПериода")); ЗначениеПараметраКонецПериода = ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериода")); ЗначениеПараметраПериод = ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Период")); Если ЗначениеПараметраНачалоПериода <> Неопределено И ЗначениеПараметраКонецПериода <> Неопределено Тогда ФормаОтчета.НачалоПериода = ЗначениеПараметраНачалоПериода.Значение; ФормаОтчета.КонецПериода = ЗначениеПараметраКонецПериода.Значение; ФормаОтчета.ЭлементыФормы.ПанельПериод.ТекущаяСтраница = ФормаОтчета.ЭлементыФормы.ПанельПериод.Страницы.Интервал; ИначеЕсли ЗначениеПараметраПериод <> Неопределено Тогда ФормаОтчета.Период = ЗначениеПараметраПериод.Значение; ФормаОтчета.ЭлементыФормы.ПанельПериод.ТекущаяСтраница = ФормаОтчета.ЭлементыФормы.ПанельПериод.Страницы.Период; Иначе ФормаОтчета.ЭлементыФормы.ПанельПериод.ТекущаяСтраница = ФормаОтчета.ЭлементыФормы.ПанельПериод.Страницы.Пустой; КонецЕсли; // Вывод заголовка отменяется Значение = ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("TitleOutput")).Значение; Пометка = (Значение = ТипВыводаТекстаКомпоновкиДанных.Выводить); Если ФормаОтчета.ЭлементыФормы.ДействияФормы.Кнопки.Найти("Заголовок") <> Неопределено тогда ФормаОтчета.ЭлементыФормы.ДействияФормы.Кнопки.Заголовок.Пометка = Пометка; КонецЕсли; Иначе ЗначенияНастроек = ПолучитьЗначенияНастроекПанелиПользователяОбъекта(ОтчетОбъект); ВыводитьЗаголовокОтчета = Истина; Если ЗначенияНастроек = Неопределено ИЛИ Не ЗначенияНастроек.Свойство("ВыводитьЗаголовокОтчета", ВыводитьЗаголовокОтчета) Тогда ВыводитьЗаголовок = Истина; Иначе ВыводитьЗаголовок = ВыводитьЗаголовокОтчета; КонецЕсли; Если ФормаОтчета.ЭлементыФормы.КоманднаяПанельДействияСОтчетом.Кнопки.Найти("Заголовок") <> Неопределено тогда ФормаОтчета.ЭлементыФормы.КоманднаяПанельДействияСОтчетом.Кнопки.Заголовок.Пометка = ВыводитьЗаголовок; КонецЕсли; ДополнительныеНастройкиОтчета = Новый Массив; ПараметрыИсполненияОтчета = ОтчетОбъект.ПолучитьПараметрыИсполненияОтчета(); Если ПараметрыИсполненияОтчета.Свойство("ДополнительныеНастройкиОтчета") И ПараметрыИсполненияОтчета.ДополнительныеНастройкиОтчета тогда ДополнительныеНастройкиОтчета = ОтчетОбъект.ПолучитьДополнительныеНастройкиОтчета(); КонецЕсли; Для каждого ДопНастройка из ДополнительныеНастройкиОтчета Цикл ЗначениеФлажка = ДопНастройка.ЗначениеПоУмолчанию; Если ЗначенияНастроек = Неопределено ИЛИ Не ЗначенияНастроек.Свойство(ДопНастройка.Имя, ЗначениеФлажка) Тогда Флажок = ложь; Иначе Флажок = ЗначениеФлажка; КонецЕсли; Если ФормаОтчета.ЭлементыФормы.Найти(ДопНастройка.Имя) <> Неопределено тогда ФормаОтчета.ЭлементыФормы[ДопНастройка.Имя].Значение = Флажок; КонецЕсли; КонецЦикла; Если ЗначенияНастроек = Неопределено тогда СкопироватьЭлементы(ФормаОтчета.КомпоновщикНастроекПользователя.Настройки.Выбор, ФормаОтчета.КомпоновщикНастроек.Настройки.Выбор); Иначе ВыбранныеПоляПользователя = ФормаОтчета.КомпоновщикНастроекПользователя.Настройки.Выбор; ВыбранныеПоля = ОтчетОбъект.КомпоновщикНастроек.Настройки.Выбор; ОбновитьПоляВНастройкеПользователя(ВыбранныеПоляПользователя, ВыбранныеПоля); КонецЕсли; ВосстановитьПараметрыТабличногоДокумента(ФормаОтчета.ЭлементыФормы.Результат, ОтчетОбъект.СохраненнаяНастройка); КонецЕсли; КонецПроцедуры // Процедура РезультатОбработкаРасшифровки // Действие, выполняемое при вызове расшифровки пользователем Процедура СтандартнаяОбработкаРасшифровкиТиповогоОтчета(ОтчетОбъект, ФормаОтчета, Расшифровка, СтандартнаяОбработка) Экспорт Перем ВыполненноеДействие; // Запретим стандартную обработку расшифровки СтандартнаяОбработка = Ложь; // Создадим и инициализируем обработчик расшифровки ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ФормаОтчета.ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПолучитьСхемуКомпоновкиОбъекта(ОтчетОбъект))); // Осуществим выбор действия расшифровки пользователем Настройки = ОбработкаРасшифровки.Выполнить(Расшифровка, ВыполненноеДействие); Если Настройки <> Неопределено Тогда // Пользователь выбрал действие, для которого нужно менять настройки Если ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить Тогда // Если требется упорядочить - упорядочим в текущем отчете ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); ФормаОтчета.ОбновитьОтчет(); Иначе НовыйОтчет = Отчеты[ОтчетОбъект.Метаданные().Имя].Создать(); ЗаполнитьЗначенияСвойств(НовыйОтчет, ОтчетОбъект, , "СохраненнаяНастройка"); НовыйОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); ФормаНовогоОтчета = НовыйОтчет.ПолучитьФорму(); НазначитьФормеУникальныйКлючИдентификации(ФормаНовогоОтчета); ФормаНовогоОтчета.ЭтоОтработкаРасшифровки = Истина; Если Не ЭтоСтараяВерсияОтчета(ОтчетОбъект) Тогда ФормаНовогоОтчета.РежимРедактированияНастройки = Истина; ФормаНовогоОтчета.ПредставлениеНастройки = "Расшифровка " + Символы.ПС + ОтчетОбъект.СохраненнаяНастройка; КонецЕсли; ФормаНовогоОтчета.Открыть(); ФормаНовогоОтчета.ОбновитьОтчет(); КонецЕсли; КонецЕсли; КонецПроцедуры на типовом отчете СКД основаны процедуры осталось тебе только вставить код, привязать в модуле менеджера и сделать инициализацию |
|||
23
potapovsanek1989
14.11.13
✎
11:30
|
(21) разрешаю
|
|||
24
potapovsanek1989
14.11.13
✎
11:31
|
Калач спасибо)
|
|||
25
Wobland
14.11.13
✎
11:32
|
и я как обычно..
|
|||
26
Повелитель
14.11.13
✎
11:48
|
(0)
Есть у меня в списке номенклатура кнопка "Показать товары с остатками" Процедура ниже. Работает практически мгновенно, больше 10000 значение в отбор не загонял, незнаю как поведет себя. Процедура ПоказатьТоварыСОстатками(Кнопка) Перем ВыбСклад; Если ЭлементыФормы.ДействияФормы.Кнопки.ПоказатьТоварыНаОстатках.Пометка Тогда ЭлементыФормы.ДействияФормы.Кнопки.ПоказатьТоварыНаОстатках.Пометка = Ложь; ЭлементОтбора = Список.Отбор.Найти("Ссылка"); ЭлементОтбора.Использование = Ложь; ЭлементыФормы.Список.ИерархическийПросмотр = Истина; ЭлементыФормы.ДействияФормы.Кнопки.ПоказатьТоварыНаОстатках.Текст = "Товары с остатками"; Возврат; КонецЕсли; Массив = Новый Массив; Массив.Добавить(Тип("СправочникСсылка.Склады")); ОписаниеТипов = Новый ОписаниеТипов(Массив); Если не ВвестиЗначение(ВыбСклад, "Выбирете склад остатков", ОписаниеТипов) Тогда Возврат; КонецЕсли; //Если не ЗначениеЗаполнено(ВыбСклад) Тогда // Возврат; //КонецЕсли; // Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.Номенклатура |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки |ГДЕ ТоварыНаСкладахОстатки.КоличествоОстаток <> 0"; Запрос.УстановитьПараметр("Склад",ВыбСклад); Если не ЗначениеЗаполнено(ВыбСклад) Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст,"Склад = &Склад"," "); КонецЕсли; РезультатЗапроса = Запрос.Выполнить(); ТаблицаЗапроса = РезультатЗапроса.Выгрузить(); мСписок = Новый СписокЗначений; мСписок.ЗагрузитьЗначения(ТаблицаЗапроса.ВыгрузитьКолонку("Номенклатура")); ЭлементОтбора = Список.Отбор.Найти("Ссылка"); ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке; ЭлементОтбора.Значение = мСписок; ЭлементОтбора.Использование = Истина; ЭлементыФормы.Список.ИерархическийПросмотр = Ложь; ЗначениеОтбораСпискаНоменклатуры = ""; ЭлементыФормы.ДействияФормы.Кнопки.ПоказатьТоварыНаОстатках.Пометка = Истина; ЭлементыФормы.ДействияФормы.Кнопки.ПоказатьТоварыНаОстатках.Текст = "Товары с остатками = " + СокрЛП(ВыбСклад); КонецПроцедуры |
|||
27
Повелитель
14.11.13
✎
11:51
|
(26) Документы можно по этому же принципу отбирать.
Вначале запрос, с нужным отбором. Потом стандартно для всех ЭлементОтбора = Список.Отбор.Найти("Ссылка"); ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке; ЭлементОтбора.Значение = мСписок; ЭлементОтбора.Использование = Истина; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |