|
v7: создание текста запроса | ☑ | ||
---|---|---|---|---|
0
Ar-Bus
26.04.12
✎
13:20
|
Доброго времени суток, господа. Помогите, пожалуйста, разобраться со следующей ситуацией.
Есть справочник "Контрагенты", ему подчинен справочник "АналитикаКонтрагентов". У справочника "АналитикаКонтрагентов" есть два реквизита - ВидАналитики(берется из независимого справочника АналитическийПризнак) и ЗначениеАналитики(периодический, берется из справочника "ЗначенияАналитикиКонтрагентов", который подчинен справочнику "АналитическийПризнак"). Необходимо создать внешний отчет, чтобы пользователь задавал условия отбора (аналитический признак и его значения), и выходила печатная форма только с теми контрагентами, реквизиты подчиненных справочников которых удовлетворяют указанным пользователем условиям отбора. Каков должен быть текст запроса? Какие должны происходить группировки? |
|||
1
andrewks
26.04.12
✎
13:20
|
конструктор в зубы, и вперёд
|
|||
2
ДенисЧ
26.04.12
✎
13:22
|
Контра = Справочник.АналитикаКонтрагентов.Владелец;
Аналитика = Справочник.АналитикаКонтрагентов.ТекущийЭлемент; ВидАналитики = Справочник.АналитикаКонтрагентов.ВидАналитики; ЗначениеАналитики = Справочник.АналитикаКонтрагентов.ЗначениеАналитики; Условие(ВидАналитики = ВыбВидАналитики); Условие(ЗначениеАналитики = ВыбЗначениеАналитики); Группировка Контра Без Групп; Группировка Аналитика.; |
|||
3
Mikeware
26.04.12
✎
13:25
|
Уже и конструктор освоить не могут...
хотя, конструктор с полнотекстовым управлением - оригинально... |
|||
4
Ar-Bus
26.04.12
✎
13:28
|
(2) уточнение - ЗначениеАналитики - ПЕРИОДИЧЕСКИЙ РЕКВИЗИТ. Как в запросе это будет выглядеть?
|
|||
5
ДенисЧ
26.04.12
✎
13:29
|
(4) Период добавь... Значение на конец оного будет браться.
|
|||
6
Boroda
26.04.12
✎
13:36
|
В типовой ТиС есть отчет "Ведомость по контрагентам" - почти один в один, только значение свойства непериодическое.
|
|||
7
Ar-Bus
26.04.12
✎
13:44
|
(5) сейчас попробую, спасибо
|
|||
8
Ar-Bus
26.04.12
✎
14:08
|
(2) а если у меня несколько значений выбранных? Ну, например, несколько ВыбВидАналитики, несколько ВыбЗначениеАналитики? Если создать список значений ВыбВидАналитики? Условие(ВидАналитики в ВыбВидАналитики) - это согласен. Но еще же есть одно - условие(ЗначениеАналитики в ВыбЗначениеАналитики) - здесь есть один момент. Значение аналитики привязано к виду аналитики, т.е. непосредственно является подчиненным справочником спр. "АналитическийПризнак". Ну вот такой пример:
ВидАналитики ЗначениеАналитики 1. наличие юриста да 2. наличие бухгалтера да в данном случае значение "да" в строке №1 не равно значению "да" в строке №2, т.к. это значения разных видов аналитик... Как-то запутанно получилось, но все же... |
|||
9
Ar-Bus
26.04.12
✎
19:25
|
Посмотрите код моего запроса, что здесь не так?
Процедура Сформировать() Т=СоздатьОбъект("Таблица"); Т.ИсходнаяТаблица("Таблица"); Запрос=СоздатьОбъект("Запрос"); НачДата=ТекущаяДата(); АналитикаКлиентов=СоздатьОбъект("Справочник.АналитикаКлиентов"); ТекстЗапроса = " |Период С НачДата По НачДата; |АналитикаКлиентов = Справочник.АналитикаКлиентов.ТекущийЭлемент; |Контрагент = Справочник.АналитикаКлиентов.Владелец; |ВидАналитики = Справочник.АналитикаКлиентов.ВидАналитики; |ЗначениеАналитики = Справочник.АналитикаКлиентов.ЗначениеАналитики;"; ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если (ПустоеЗначение(ТЗ.ЗначениеАналитики)=1) И (ПропускатьПустыеЗначения=1) Тогда Продолжить; КонецЕсли; ТекстЗапроса=ТекстЗапроса+"Условие(ЗначениеАналитики=ТЗ.ЗначениеАналитики);"; КонецЦикла; ТекстЗапроса = ТекстЗапроса + " |Группировка Контрагент Упорядочить по Контрагент.Наименование;"; Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда Сообщить("Не выполнен текст запроса! Обработка остановлена"); возврат; КонецЕсли; Пока Запрос.Группировка("Контрагент")=1 Цикл Т.ВывестиСекцию("Контрагент"); КонецЦикла; Т.Показать(); КонецПроцедуры |
|||
10
Ork
26.04.12
✎
19:28
|
(9) Все не читал.
Вот это вот : ================= ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если (ПустоеЗначение(ТЗ.ЗначениеАналитики)=1) И (ПропускатьПустыеЗначения=1) Тогда Продолжить; КонецЕсли; ТекстЗапроса=ТекстЗапроса+"Условие(ЗначениеАналитики=ТЗ.ЗначениеАналитики);"; КонецЦикла; ============== для наглядности заменить на : Условие(ЗначениеАналитики В СписокЗначенийАналитики) перед этим этот самый список сформировать. |
|||
11
Ar-Bus
27.04.12
✎
12:35
|
(10) я уже и пробовал в список значений заносить ТЗ.ЗначениеАналитики, а потом писать Условие(ЗначениеАналитики в СписокЗначенийАналитики), но тогда получается такая вещь: комп берет значениеАналитикиКонтрагента, смотрит, есть ли такое в списке значений, и, если есть, то выводит контрагента с данным значениемАналитики. Но мне, например, надо так: чтобы выводились только те контрагенты, у которых есть все ЗначенияАналитики, которые присутствуют в списке значений
|
|||
12
Ar-Bus
27.04.12
✎
13:53
|
Все оказалось гораздо проще, обошелся без использования запросов:
Процедура Сформировать() Контрагенты=СоздатьОбъект("Справочник.Контрагенты"); Т=СоздатьОбъект("Таблица"); АналитикаКлиентов=СоздатьОбъект("Справочник.АналитикаКлиентов"); Контрагенты.ВыбратьЭлементы(); Пока Контрагенты.ПолучитьЭлемент()=1 Цикл Если Контрагенты.ТекущийЭлемент().ЭтоГруппа()=1 Тогда Продолжить; КонецЕсли; АналитикаКлиентов.ИспользоватьВладельца(Контрагенты.ТекущийЭлемент()); ТЗ.ВыбратьСтроки(); Выводить=0; Пока ТЗ.ПолучитьСтроку()=1 Цикл Если (ПустоеЗначение(ТЗ.ЗначениеАналитики)=1) И (ПропускатьПустыеЗначения=1) Тогда Продолжить; КонецЕсли; Если АналитикаКлиентов.НайтиПоРеквизиту("ВидАналитики",ТЗ.ВидАналитики,0)=0 Тогда выводить=0; Прервать; ИначеЕсли АналитикаКлиентов.ЗначениеАналитики.Получить(начДата)<>ТЗ.ЗначениеАналитики Тогда Выводить=0; прервать; Иначе Выводить=1; КонецЕсли; КонецЦикла; Если Выводить=1 Тогда Т.ВывестиСекцию("Контрагент"); КонецЕсли; КонецЦикла; Т.Показать(); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |