|
СКД. Программно изменить текст схемы компоновки данных. | ☑ | ||
---|---|---|---|---|
0
ProProg
24.01.12
✎
14:03
|
Как программно изменить в тексте запроса некоторые значения.
Например в запросе есть участок по запросу регистра где указана периодичность в параметрах запроса. Например Месяц. Нужно программно до выполнения изменить Месяц на произвольную (выбирается в диалоге). |
|||
1
ProProg
24.01.12
✎
14:04
|
Ранее в обычных запросах это делал методом
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Месяц",Периодичность); |
|||
2
Mort
24.01.12
✎
14:04
|
Периодичность можно вытащить как параметр СКД.
|
|||
3
Mort
24.01.12
✎
14:05
|
Если текстом трудно, на закладке компоновки можно задать псевдонимы параметров для виртуальных таблиц (кнопка такая есть там)
|
|||
4
ProProg
24.01.12
✎
14:09
|
(2) не катит. это не параметр. это текст запроса.
|
|||
5
ProProg
24.01.12
✎
14:10
|
Месяц, день и т.д. и т.п. это методы языка 1С.
| ВЫБРАТЬ | Продажи.Номенклатура, | Продажи.ХарактеристикаНоменклатуры, | 0, | СУММА(Продажи.КоличествоОборот * Продажи.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / Продажи.Номенклатура.ЕдиницаДляОтчетов.Коэффициент), | КОЛИЧЕСТВО(Различные(Продажи.Период)), | КОЛИЧЕСТВО(Различные(Продажи.ДокументПродажи)), | 0, | 0, | 0, | 0, | ВЫБОР | КОГДА КОЛИЧЕСТВО(Различные(Продажи.Период)) > 0 | И СУММА(Продажи.КоличествоОборот) > 0 | ТОГДА СУММА(Продажи.КоличествоОборот * Продажи.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / Продажи.Номенклатура.ЕдиницаДляОтчетов.Коэффициент) / КОЛИЧЕСТВО(Различные(Продажи.Период)) | ИНАЧЕ 0 | КОНЕЦ, | 0, | 0, | 0, | 0, | 0, | 0, | 0 | ИЗ | РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, Месяц, {(Номенклатура).* КАК Номенклатура, (Подразделение).* КАК Подразделение, (Контрагент).* КАК Покупатель, (ДоговорКонтрагента).* КАК ДоговорКонтрагента}) КАК Продажи | СГРУППИРОВАТЬ ПО | Продажи.Номенклатура, | Продажи.ХарактеристикаНоменклатуры |
|||
6
ProProg
24.01.12
✎
14:11
|
Это не может быть указано параметром т.к. является встроенной функцией запроса
РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, Месяц, {(Номенклатура).* КАК Номенклатура, (Подразделение).* КАК Подразделение, (Контрагент).* КАК Покупатель, (ДоговорКонтрагента).* КАК ДоговорКонтрагента}) КАК Продажи |
|||
7
dmpl
24.01.12
✎
14:12
|
(0) Ну так сделай источник данных - таблица значений. А уж ее формируй как привык.
|
|||
8
ProProg
24.01.12
✎
14:13
|
У меня СКД запрос, но формируется программно. В том числе результат я программно извлекаю.
Мне сейчас тупо надо как то сделать чтобы в запросе менялся Месяц на любую другую периодичность. |
|||
9
dmpl
24.01.12
✎
14:13
|
+(7) или даже результат запроса можно попробовать.
|
|||
10
Mort
24.01.12
✎
14:13
|
(6) Себя убеждаешь? Ладно...
А у меня работает. Пысы Месяц, день и т.п. для платформы это числа, ну на случай если программно значение параметра поставить. А так СКД-шка представления даёт для выбора. |
|||
11
Mort
24.01.12
✎
14:15
|
(6) "Это не может быть указано параметром т.к. является встроенной функцией запроса ".
А что оно делает в параметрах виртуальной таблицы? |
|||
12
Mort
24.01.12
✎
14:16
|
РегистрНакопления.ОборотыБДДСПлан.Обороты(&НачалоПериода, &КонецПериода, Месяц {(&ВидПериода)}, Сценарий = &Сценарий .. и т.д.
|
|||
13
ProProg
24.01.12
✎
14:17
|
(11) не тупи. в параметрах регистра (для оборотного - это после второй запятой) есть параметр - Периодичность. Оно текстовое.
Это не передаваемый параметр |
|||
14
ProProg
24.01.12
✎
14:18
|
если тебя смутило слово Параметр. птут говорится не про параметр запроса, а параметр выборки регистра.
|
|||
15
ProProg
24.01.12
✎
14:18
|
(12) хм... не знал.
Месяц {(&ВидПериода)} меняет периодичность? |
|||
16
Shurjk
24.01.12
✎
14:18
|
(0) Открой для себя построитель запросов.
|
|||
17
Mort
24.01.12
✎
14:19
|
(15) Во во, сам не тупи.
(16) В бабруйск ПЗ. |
|||
18
ProProg
24.01.12
✎
14:24
|
Что то пустой результат.
|
|||
19
Shurjk
24.01.12
✎
14:24
|
(17) Чего?
|
|||
20
ProProg
24.01.12
✎
14:25
|
Значение параметра должно быть текстовое или с типом перечисления?
|
|||
21
ProProg
24.01.12
✎
14:29
|
или число? как только добавил в параметрах появился параметр с значением 9.
Т.е. должно быть число? |
|||
22
ProProg
24.01.12
✎
14:30
|
Есть описание как 1С периодичность по числам берет?
Месяц как я понял - 9. Какие числа будут для других периодичностей? |
|||
23
Defender aka LINN
24.01.12
✎
14:38
|
ППЦ... А периодичность "Авто" - не по-пацански, типа?
|
|||
24
ProProg
24.01.12
✎
14:41
|
(23) какое нафиг авто. авто добавляет в переменные запроса все группировки с периодами. а мне они вообще нафиг не нужны. Ты хоть текст запроса смотрел?
Мне периодичность нужна (её юзер выбирает в диалоге отчета) для просчета определенных колонок которые зависят от неё. никаких группировко по периодичностям не выводится. |
|||
25
ProProg
24.01.12
✎
14:43
|
в (5) текст запроса. От указанной периодичности влияет расчет
| КОЛИЧЕСТВО(Различные(Продажи.Период)), Юзер выбирает период продаж, периодичность и получает один из показателей - количество периодов продаж (только те когда товар продавался) за весь период. Показатель получает числом. Т.е. если например выбрал 7 месяцев то по товару будут числа 3,4,5 и т.п. т.е. в скольких месяцах за все 7 были продажи. |
|||
26
Defender aka LINN
24.01.12
✎
14:51
|
КОЛИЧЕСТВО(Различные(Продажи.ПериодМесяц))
КОЛИЧЕСТВО(Различные(Продажи.ПериодДень)) И т.д. |
|||
27
ProProg
24.01.12
✎
15:08
|
(26) ты сам понимаешь что это фигня полная. да еще и лишние вычисления.
у меня тут 100 000 номенклатуры. 2 года загруженных продаж в УТ11. в день по 2-5 тысяч товаров продаются. |
|||
28
ProProg
24.01.12
✎
15:08
|
Итак 1С умирает - недостаточно памяти выдает. Запрос по 10 регистрам. а ты еще хоч чтобя я еще вычислений навешал.
|
|||
29
sanja26
24.01.12
✎
15:12
|
Посмотри отчет УТ 11 Остатки по складам в ценах номенклатуры. При компоновке данных
|
|||
30
Defender aka LINN
24.01.12
✎
15:12
|
(27) Какие, нафиг, лишние вычисления? Учите матчасть. Результирующий запрос<>запрос в схеме какбе.
|
|||
31
sanja26
24.01.12
✎
15:23
|
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь; ПараметрВидЦены = Новый ПараметрКомпоновкиДанных("ВидЦены"); ЗначениеПараметраВидЦены = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрВидЦены); Если ЗначениеПараметраВидЦены <> Неопределено Тогда ЗначениеПараметраВидЦены.Значение = ВидЦены; ЗначениеПараметраВидЦены.Использование = Истина; КонецЕсли; ДокументРезультат.Очистить(); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры") Тогда СхемаКомпоновкиДанных = Отчеты.ВедомостьПоТоварамНаСкладахВЦенахНоменклатуры.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных[0].Запрос; ЗаменяемыйТекст = " ВЫБОР | КОГДА | ЦеныНоменклатурыА.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиНоменклатуры.ПустаяСсылка) | ИЛИ ЕСТЬNULL(ЦеныНоменклатурыА.Упаковка.Коэффициент,0) = 0 | ТОГДА | ЦеныНоменклатурыА.Цена | ИНАЧЕ | ЦеныНоменклатурыА.Цена / ЦеныНоменклатурыА.Упаковка.Коэффициент | КОНЕЦ КАК Цена, | ВЫБОР | КОГДА | ЦеныНоменклатурыБ.Цена ЕСТЬ NULL | ТОГДА | 0 | КОГДА | ЦеныНоменклатурыБ.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиНоменклатуры.ПустаяСсылка) | ИЛИ ЕСТЬNULL(ЦеныНоменклатурыБ.Упаковка.Коэффициент,0) = 0 | ТОГДА | ЦеныНоменклатурыБ.Цена | ИНАЧЕ | ЦеныНоменклатурыБ.Цена / ЦеныНоменклатурыБ.Упаковка.Коэффициент | КОНЕЦ КАК СтараяЦена, | ВЫБОР | КОГДА | ЦеныНоменклатурыА.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиНоменклатуры.ПустаяСсылка) | ИЛИ ЕСТЬNULL(ЦеныНоменклатурыА.Упаковка.Коэффициент,0) = 0 | ТОГДА | ЦеныНоменклатурыА.Цена | ИНАЧЕ | ЦеныНоменклатурыА.Цена / ЦеныНоменклатурыА.Упаковка.Коэффициент | КОНЕЦ | - ВЫБОР | КОГДА | ЦеныНоменклатурыБ.Цена ЕСТЬ NULL | ТОГДА | 0 | КОГДА | ЦеныНоменклатурыБ.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиНоменклатуры.ПустаяСсылка) | ИЛИ ЕСТЬNULL(ЦеныНоменклатурыБ.Упаковка.Коэффициент,0) = 0 | ТОГДА | ЦеныНоменклатурыБ.Цена | ИНАЧЕ | ЦеныНоменклатурыБ.Цена / ЦеныНоменклатурыБ.Упаковка.Коэффициент | КОНЕЦ | КАК Дельта"; Если Найти(ТекстЗапроса, ЗаменяемыйТекст) = 0 Тогда ВызватьИсключение НСтр("ru = 'Некорректный текст запроса'"); КонецЕсли; ТекстЗамены = " ЦеныНоменклатурыА.Цена КАК Цена, | ВЫБОР | КОГДА | ЦеныНоменклатурыБ.Цена ЕСТЬ NULL | ТОГДА | 0 | ИНАЧЕ | ЦеныНоменклатурыБ.Цена | КОНЕЦ КАК СтараяЦена, | ЦеныНоменклатурыА.Цена | - ВЫБОР | КОГДА | ЦеныНоменклатурыБ.Цена ЕСТЬ NULL | ТОГДА | 0 | ИНАЧЕ | ЦеныНоменклатурыБ.Цена | КОНЕЦ | КАК Дельта"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ЗаменяемыйТекст, ТекстЗамены); СхемаКомпоновкиДанных.НаборыДанных[0].Запрос = ТекстЗапроса; КонецЕсли; МакетКомпоновки = КомпоновщикМакета.Выполнить( СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки ); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать( МакетКомпоновки, , ДанныеРасшифровки ); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.НачатьВывод(); ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина); ПроцессорВывода.ЗакончитьВывод(); КонецПроцедуры // ПриКомпоновкеРезультата() |
|||
32
ProProg
24.01.12
✎
15:40
|
(31)а проще никак? не хотелось бы весь текст запроса дублировать. он огромный. а менять надо всего 1 слово.
|
|||
33
ProProg
24.01.12
✎
15:40
|
ааа. все допер
|
|||
34
ProProg
24.01.12
✎
15:40
|
ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных[0].Запрос;
далее меняем и опять впихиваем |
|||
35
ProProg
24.01.12
✎
15:40
|
Спасибо!
|
|||
36
ProProg
24.01.12
✎
15:56
|
(31) вот это лучший вариант. Всего три строчки ушло. Всего навсего нужно было текст получить, заменить что надо и опять вставить. Все работает! Считает правильно.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |