|
Помогите с запросом! | ☑ | ||
---|---|---|---|---|
0
mzelensky
14.05.12
✎
10:13
|
Доброго всем! Подскажите как сделать!
Есть отчет Валовая прибыль. В него добавлена выборка табличной части справочника Контрагенты (через левое соединение) - смысл ее в том, чтобы можно ыбло получить Маркетинговые программы, в которых участвует контрагент (соответственно эти программы прописаны в ТЧ справочника): ВЫБРАТЬ РАЗРЕШЕННЫЕ ВложенныйЗапрос.Покупатель КАК Покупатель, ВложенныйЗапрос.Организация КАК Организация, ВложенныйЗапрос.Проект КАК Проект, ВложенныйЗапрос.ДоговорПокупателя КАК ДоговорПокупателя, ВложенныйЗапрос.Номенклатура КАК Номенклатура, ВложенныйЗапрос.ДокументПродажи КАК ДокументПродажи, ВложенныйЗапрос.Регистратор КАК Регистратор, ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.Организация) КАК ОрганизацияПредставление, ВложенныйЗапрос.Стоимость КАК Стоимость, ВложенныйЗапрос.Количество КАК Количество, ВложенныйЗапрос.МаркетинговаяПрограммаПокупателя ИЗ (ВЫБРАТЬ ВложенныйЗапрос.ДокументПродажи.Организация КАК Организация, ВложенныйЗапрос.Проект КАК Проект, ВложенныйЗапрос.Покупатель КАК Покупатель, ВложенныйЗапрос.ДоговорПокупателя КАК ДоговорПокупателя, ВложенныйЗапрос.Номенклатура КАК Номенклатура, ВложенныйЗапрос.ДокументПродажи КАК ДокументПродажи, ВложенныйЗапрос.Регистратор КАК Регистратор, СУММА(ВложенныйЗапрос.Количество) КАК Количество, СУММА(ВложенныйЗапрос.Стоимость) КАК Стоимость, ЕСТЬNULL(МаркетинговыеПрограммыПокупателя.МаркетинговаяПрограмма, ЗНАЧЕНИЕ(Справочник.МаркетинговыеПрограммы.пустаяСсылка)) КАК МаркетинговаяПрограммаПокупателя ИЗ (ВЫБРАТЬ ПродажиОбороты.Проект КАК Проект, ПродажиОбороты.Контрагент КАК Покупатель, ПродажиОбороты.ДоговорКонтрагента КАК ДоговорПокупателя, ПродажиОбороты.Номенклатура КАК Номенклатура, ПродажиОбороты.ДокументПродажи КАК ДокументПродажи, ПродажиОбороты.Регистратор КАК Регистратор, ПродажиОбороты.КоличествоОборот КАК Количество, ПродажиОбороты.СтоимостьОборот КАК Стоимость ИЗ РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, Регистратор, {(ДокументПродажи.Организация).* КАК Организация, (Проект).* КАК Проект, (Подразделение).* КАК Подразделение, (Контрагент).* КАК Покупатель, (ДоговорКонтрагента).* КАК ДоговорПокупателя, (Номенклатура).* КАК Номенклатура, (ХарактеристикаНоменклатуры).* КАК ХарактеристикаНоменклатуры, (ЗаказПокупателя).* КАК ЗаказПокупателя, (ДокументПродажи).* КАК ДокументПродажи}) КАК ПродажиОбороты) КАК ВложенныйЗапрос ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.МаркетинговыеПрограммы КАК МаркетинговыеПрограммыПокупателя ПО ВложенныйЗапрос.Покупатель = МаркетинговыеПрограммыПокупателя.Ссылка СГРУППИРОВАТЬ ПО ВложенныйЗапрос.Проект, ВложенныйЗапрос.Покупатель, ВложенныйЗапрос.ДоговорПокупателя, ВложенныйЗапрос.Номенклатура, ВложенныйЗапрос.ДокументПродажи, ВложенныйЗапрос.Регистратор, ВложенныйЗапрос.ДокументПродажи.Организация, ЕСТЬNULL(МаркетинговыеПрограммыПокупателя.МаркетинговаяПрограмма, ЗНАЧЕНИЕ(Справочник.МаркетинговыеПрограммы.пустаяСсылка))) КАК ВложенныйЗапрос ГДЕ ВложенныйЗапрос.Покупатель = &Покупатель ИТОГИ СУММА(Стоимость), СУММА(Количество) ПО ОБЩИЕ, Покупатель Проблема встала с группировками - ресурсы (количество и сумма) суммируются по количеству маркетинговых программ! Если в отчете делать группировку по контрагенту и маркетинговой программе, то все выглядит достаточно логично (пусть и с кривыми группировками), а если сделать группировку только по контрагенту (а контрагент, например, участвует в 2 программах), то сумма и количество задваиваются. КАК ПРАВИЛЬНО СВЕРНУТЬ ТАБЛИЦУ? П.С. СКД не предлагать - этот вариант не подходит. |
|||
1
mzelensky
14.05.12
✎
10:26
|
апп
|
|||
2
Maxus43
14.05.12
✎
10:28
|
МАКСИМУМ вместо СУММА юзать?
|
|||
3
mzelensky
14.05.12
✎
10:34
|
(2) максимум ЧЕГО? суммы и количества?
|
|||
4
Maxus43
14.05.12
✎
10:35
|
(3) да.
всё что щас есть оберни во вложенный запрос, а потом делай соединение к маркетинговым и группируй уже с МАКСИМУМ |
|||
5
Maxus43
14.05.12
✎
10:35
|
(4) + лучше ВТ чем вложенный имхо
|
|||
6
mzelensky
14.05.12
✎
10:36
|
(5) сейчас попробую, но что-то мне кажется не прокатит...
|
|||
7
Maxus43
14.05.12
✎
10:38
|
(6) без маркетиновых в ВТ, потом к ней уже цепляй соединением их
|
|||
8
mzelensky
14.05.12
✎
10:53
|
(7) теперь выходит другой косяк! если сделать максимум:
ВложЗП.Организация КАК Организация, ВложЗП.Проект КАК Проект, ВложЗП.Подразделение КАК Подразделение, ВложЗП.Покупатель КАК Покупатель, ВложЗП.ДоговорПокупателя КАК ДоговорПокупателя, ВложЗП.Номенклатура КАК Номенклатура, ВложЗП.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, ВложЗП.ЗаказПокупателя КАК ЗаказПокупателя, ВложЗП.ДокументПродажи КАК ДокументПродажи, ВложЗП.Регистратор КАК Регистратор, ВложЗП.Период КАК Период, ВложЗП.ПериодДень КАК ПериодДень, ВложЗП.ПериодНеделя КАК ПериодНеделя, ВложЗП.ПериодДекада КАК ПериодДекада, ВложЗП.ПериодМесяц КАК ПериодМесяц, ВложЗП.ПериодКвартал КАК ПериодКвартал, ВложЗП.ПериодПолугодие КАК ПериодПолугодие, ВложЗП.ПериодГод КАК ПериодГод, МАКСИМУМ(ВложЗП.Количество) КАК Количество, МАКСИМУМ(ВложЗП.КоличествоЕдиницОтчетов) КАК КоличествоЕдиницОтчетов, МАКСИМУМ(ВложЗП.КоличествоБазовыхЕдиниц) КАК КоличествоБазовыхЕдиниц, МАКСИМУМ(ВложЗП.СтоимостьБезНДС) КАК СтоимостьБезНДС, МАКСИМУМ(ВложЗП.НДС) КАК НДС, МАКСИМУМ(ВложЗП.Стоимость) КАК Стоимость, МАКСИМУМ(ВложЗП.Вес) КАК Вес, МАКСИМУМ(ВложЗП.ВесНетто) КАК ВесНетто, МАКСИМУМ(ВложЗП.Литры) КАК Литры, МАКСИМУМ(МаркетинговыеПрограммыПокупателя.МаркетинговаяПрограмма) КАК МаркетинговаяПрограмма То теперь, если я выставляю группировку по 1) Покупатель 2) Маркетинговая программа запрос выдает только 1 маркетинговую программу - соответственно максимальную, а нужно то все! |
|||
9
mzelensky
14.05.12
✎
10:58
|
я уже думаю - может перед выполнением отчета получить группировки полей:
1) Если есть в группировках Маркетинговая программа - делать группировку по ней 2) Если нет - сворачивать по Максимум(Маркетинговая программа) |
|||
10
Maxus43
14.05.12
✎
11:01
|
Это нахрена: МАКСИМУМ(МаркетинговыеПрограммыПокупателя.МаркетинговаяПрограмма
конечно одну выдаст. маркетинговую то Группируй а не Максимизируй |
|||
11
mzelensky
14.05.12
✎
11:07
|
(10) если вывести Маркетинговую Программу в группировку:
ВЫБРАТЬ РАЗРЕШЕННЫЕ ВложенныйЗапрос.Покупатель КАК Покупатель, ВложенныйЗапрос.МаркетинговаяПрограмма, ВложенныйЗапрос.Стоимость КАК Стоимость, ВложенныйЗапрос.Организация КАК Организация, ВложенныйЗапрос.ДоговорПокупателя КАК ДоговорПокупателя, ВложенныйЗапрос.Номенклатура КАК Номенклатура, ВложенныйЗапрос.ДокументПродажи КАК ДокументПродажи, ВложенныйЗапрос.Регистратор КАК Регистратор, ВложенныйЗапрос.Количество КАК Количество {ВЫБРАТЬ Организация.*, Покупатель.*, ДоговорПокупателя.*, Номенклатура.*, ДокументПродажи.*, Регистратор.*, Количество, Стоимость} ИЗ (ВЫБРАТЬ ВложЗП.Организация КАК Организация, ВложЗП.Покупатель КАК Покупатель, ВложЗП.ДоговорПокупателя КАК ДоговорПокупателя, ВложЗП.Номенклатура КАК Номенклатура, ВложЗП.ДокументПродажи КАК ДокументПродажи, ВложЗП.Регистратор КАК Регистратор, МАКСИМУМ(ВложЗП.Количество) КАК Количество, МАКСИМУМ(ВложЗП.Стоимость) КАК Стоимость, МаркетинговыеПрограммыПокупателя.МаркетинговаяПрограмма КАК МаркетинговаяПрограмма ИЗ (ВЫБРАТЬ ВложенныйЗапрос.ДокументПродажи.Организация КАК Организация, ВложенныйЗапрос.Покупатель КАК Покупатель, ВложенныйЗапрос.ДоговорПокупателя КАК ДоговорПокупателя, ВложенныйЗапрос.Номенклатура КАК Номенклатура, ВложенныйЗапрос.ДокументПродажи КАК ДокументПродажи, ВложенныйЗапрос.Регистратор КАК Регистратор, СУММА(ВложенныйЗапрос.Количество) КАК Количество, СУММА(ВложенныйЗапрос.Стоимость) КАК Стоимость {ВЫБРАТЬ Организация.*, Покупатель.*, ДоговорПокупателя.*, Номенклатура.*, ДокументПродажи.*, Регистратор.*} ИЗ (ВЫБРАТЬ ПродажиОбороты.Контрагент КАК Покупатель, ПродажиОбороты.ДоговорКонтрагента КАК ДоговорПокупателя, ПродажиОбороты.Номенклатура КАК Номенклатура, ПродажиОбороты.ДокументПродажи КАК ДокументПродажи, ПродажиОбороты.Регистратор КАК Регистратор, ПродажиОбороты.КоличествоОборот КАК Количество, ПродажиОбороты.СтоимостьОборот КАК Стоимость ИЗ РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, Регистратор, {(ДокументПродажи.Организация).* КАК Организация, (Проект).* КАК Проект, (Подразделение).* КАК Подразделение, (Контрагент).* КАК Покупатель, (ДоговорКонтрагента).* КАК ДоговорПокупателя, (Номенклатура).* КАК Номенклатура, (ХарактеристикаНоменклатуры).* КАК ХарактеристикаНоменклатуры, (ЗаказПокупателя).* КАК ЗаказПокупателя, (ДокументПродажи).* КАК ДокументПродажи}) КАК ПродажиОбороты) КАК ВложенныйЗапрос СГРУППИРОВАТЬ ПО ВложенныйЗапрос.ДоговорПокупателя, ВложенныйЗапрос.Регистратор, ВложенныйЗапрос.Номенклатура, ВложенныйЗапрос.ДокументПродажи, ВложенныйЗапрос.Покупатель, ВложенныйЗапрос.ДокументПродажи.Организация) КАК ВложЗП ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.МаркетинговыеПрограммы КАК МаркетинговыеПрограммыПокупателя ПО ВложЗП.Покупатель = МаркетинговыеПрограммыПокупателя.Ссылка СГРУППИРОВАТЬ ПО ВложЗП.Регистратор, ВложЗП.Организация, ВложЗП.ДокументПродажи, ВложЗП.Номенклатура, ВложЗП.ДоговорПокупателя, ВложЗП.Покупатель, МаркетинговыеПрограммыПокупателя.МаркетинговаяПрограмма) КАК ВложенныйЗапрос ГДЕ ВложенныйЗапрос.Покупатель = &Покупатель {ГДЕ ВложенныйЗапрос.Регистратор.*, ВложенныйЗапрос.Количество, ВложенныйЗапрос.Стоимость} {УПОРЯДОЧИТЬ ПО Организация.*, Покупатель.*, ДоговорПокупателя.*, Номенклатура.*, ДокументПродажи.*, Регистратор.*, Количество, Стоимость} ИТОГИ СУММА(Стоимость), СУММА(Количество) ПО ОБЩИЕ {ИТОГИ ПО Организация.*, Покупатель.*, ДоговорПокупателя.*, Номенклатура.*, ДокументПродажи.*, Регистратор.*} То получается тоже самое, что и до этого - задвоение. |
|||
12
Maxus43
14.05.12
✎
11:12
|
хз, это точно работает, но тут через построитель идёт, универсальный отчет, может он чего переделывает в итоге в зависимости от настроек...
|
|||
13
mzelensky
14.05.12
✎
11:22
|
(12) все правильно он делает. Смотри :
Получаем сперва таблицу (тут детализация идет вообще вплоть до номенклатуры ВложенныйЗапрос.ДоговорПокупателя, ВложенныйЗапрос.Регистратор, ВложенныйЗапрос.Номенклатура, ВложенныйЗапрос.ДокументПродажи, ВложенныйЗапрос.Покупатель, ВложенныйЗапрос.ДокументПродажи.Организация) Контр1 док1 Сумма 10 Контр1 док2 Сумма 5 Контр1 док3 Сумма 15 Затем левым соединение по Контру цепляем программы и получаем (допустим их две): Контр1 док1 Сумма 10 МП1 Контр1 док1 Сумма 10 МП2 Контр1 док2 Сумма 5 МП1 Контр1 док2 Сумма 5 МП2 Контр1 док3 Сумма 15 МП1 Контр1 док3 Сумма 15 МП2 Далее мы эту таблицу пытаемся свернуть по МП использую для ресурсов максимуму. Но программ то 2 - следовательно после группировки она 2 строки и оставляет. |
|||
14
Maxus43
14.05.12
✎
11:26
|
да, точно. ИТОГИ по Максимум попробуй
|
|||
15
mzelensky
14.05.12
✎
11:33
|
(14) так в том и дело, что мне ИТОГИ по СУММА нужны.
|
|||
16
mzelensky
14.05.12
✎
11:35
|
(14) пойдем в обход проблемы! Пытаюсь сделать так (когда пользователь нажал кнопку "СФОРМИРОВАТЬ"):
ФлИспользуетГруппировкуПоМП=ложь; Для каждого ИзмерениеСтроки из УниверсальныйОтчет.ПостроительОтчета.ИзмеренияСтроки Цикл Если Найти(ИзмерениеСтроки.Имя, "МаркетинговаяПрограммаПокупателя") <>0 тогда ФлИспользуетГруппировкуПоМП=истина; прервать; КонецЕсли; КонецЦИкла; Если ФлИспользуетГруппировкуПоМП тогда ТекстЗапроса ="...."; УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса; УниверсальныйОтчет.УстановитьПредставленияПолей(УниверсальныйОтчет.мСтруктураПредставлениеПолей, УниверсальныйОтчет.ПостроительОтчета); УниверсальныйОтчет.УстановитьТипыЗначенийСвойствДляОтбора(); КонецЕсли; Отказ = Ложь; УчетнаяПолитика = ОбщегоНазначения.ПолучитьПараметрыУчетнойПолитики(?(Не ЗначениеЗаполнено(УниверсальныйОтчет.ДатаКон), ТекущаяДата(), УниверсальныйОтчет.ДатаКон), Отказ); УниверсальныйОтчет.ПостроительОтчета.Параметры.Вставить("НеВключатьНДСВСтоимостьПартий", ?(Отказ, Ложь, УчетнаяПолитика.НеВключатьНДСВСтоимостьПартий)); УниверсальныйОтчет.СформироватьОтчет(ТабличныйДокумент); |
|||
17
mzelensky
14.05.12
✎
11:36
|
(16) + т.е. обрабатываю группировки отчета и если нахожу там нужную, пытаюсь переделать запрос отчета.
Косяк - если он отрабатывает (условие на изменение текста запроса) - то почему-то он вообще убивает все группировки и записывает ВСЕ поля как "дополнительные" |
|||
18
Maxus43
14.05.12
✎
11:40
|
http://devtrainingforum.v8.1c.ru/forum/thread.jsp;jsessionid=adrEafRp3UVa6PsskD?id=552408&sortt=m.left_ns
v8: Как вывести итоги не по всем группировкам? покури, может подойдёт. З.ы. Вобще видел что можно делать итоги по определённым уровням группировок, а не по всем... |
|||
19
mzelensky
14.05.12
✎
11:42
|
(18) как-то делал, но косяк в том, что тебе нужно знать эти уровни (их количество и структуру), а тут отчет универсальный и заранее ты этого знать не можешь!
|
|||
20
mzelensky
14.05.12
✎
11:44
|
(18) подскажи плиз как (17) побудить - мне кажется это более выигрышный вариант.
|
|||
21
mzelensky
14.05.12
✎
11:49
|
народ, где мастера ПОСТРОИТЕЛЯ?!?!?!?!
|
|||
22
mzelensky
14.05.12
✎
12:08
|
аппппп
|
|||
23
mzelensky
14.05.12
✎
12:23
|
Люди, ну что за беда! Подскажите уже, почему при изменении текста запроса все настройки сбрасываются?!?!?!?!
|
|||
24
mzelensky
14.05.12
✎
12:41
|
буду апать - что еще делать :(
|
|||
25
mzelensky
14.05.12
✎
12:53
|
фрррррр
|
|||
26
mzelensky
14.05.12
✎
13:17
|
ну что, соображающих в построителе не появилось?!
|
|||
27
badboychik
14.05.12
✎
13:34
|
тему не читал но использование построителя осуждаю
|
|||
28
hhhh
14.05.12
✎
13:40
|
(26) самое основное в построителе - это то, что из текста запроса он формирует настройки. Это краеугольный камень построителей. Поэтому вам нужно или смириться с этим или как в (27): выбросить построители.
|
|||
29
mzelensky
14.05.12
✎
13:51
|
(27) молодец! Только как это может мне помочь?
|
|||
30
sash-ml
14.05.12
✎
13:52
|
Почему бы не перенести маркетинговые программы в свойства или категории? и использовать обычные механизмы универсального отчета?
|
|||
31
hhhh
14.05.12
✎
13:56
|
(29) но какой должен быть результат? Допустим контрагент заплатил 100 тыс. рублей. И работает по трем маркетинговым программам. В какой пропорции он должен раскидать эти сто тысяч на три кучки? У вас в запросе это нигде не просматривается.
|
|||
32
Axel2009
14.05.12
✎
13:59
|
ну так ты перед присваиванием текста должен сохранить настройки построителя, после присваивания их восстановить. там нет сложного ничего
|
|||
33
mzelensky
14.05.12
✎
14:13
|
(28) с (27) смиряться не буду, выбрасывать нет возможности!
Я не против его краеугольности, пусть формирует...я не пойму почему при изменении текста (перев формированием) он сбрасывает уже установленные пользователем настройки |
|||
34
mzelensky
14.05.12
✎
14:14
|
(31) да не нужно мне суммы раскидывать. Пусть сумма будет одна для каждой программы - здесь эти программы разделяются чисто для визуального просмотра.
|
|||
35
mzelensky
14.05.12
✎
14:16
|
(32) а зачем их сохранять и потом восстанавливать? я же их не затираю, не изменяю...даже в отладчике смотрю - они какие были, такие и остались...до обращения к формированию отчета.
|
|||
36
mzelensky
14.05.12
✎
14:16
|
(32) может есть рабочий примерчик?
|
|||
37
mzelensky
14.05.12
✎
14:17
|
(30) не удобно.
|
|||
38
Axel2009
14.05.12
✎
14:29
|
(35) при присваивании текста запроса все настройки зануляются
|
|||
39
mzelensky
14.05.12
✎
14:53
|
(38) а как их тогда сохранить и восстановить? А между этим заменить текст запроса?
|
|||
40
mzelensky
14.05.12
✎
15:06
|
(38) ???
|
|||
41
mzelensky
15.05.12
✎
10:37
|
может сегодня повезет.
Вопрос в (39) |
|||
42
Axel2009
16.05.12
✎
11:20
|
ну глянь методы построителя. там получить настройки, заполнить настройки
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |