![]() |
![]() |
![]() |
|
v.7.7: Как получить вид справочника в запросе? | ☑ | ||
---|---|---|---|---|
0
PashaTP
26.12.05
✎
02:21
|
v.7.7: Как получить вид справочника в запросе?
Поле многострочной части документа вида Справочник неопределенного вида. Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Запрос) |Период с Дата1 по Дата2; |ОбрабатыватьДокументы Проведенные; |ТекущийДокумент = Документ.ПриходТМЦ.ТекущийДокумент; |НомерСтроки = Документ.ПриходТМЦ.НомерСтроки; |ПОСТ = Документ.ПриходТМЦ.СубконтоКт1; |ВидТМЦ = Документ.ПриходТМЦ.ТМЦ.Вид; |НалБезНал = Документ.ПриходТМЦ.НалБезНал; |Колво = Документ.ПриходТМЦ.Колво; |Сумма = Документ.ПриходТМЦ.Сумма; |СуммаЗатрат = Документ.ПриходТМЦ.СуммаЗатрат; |СуммаЗатратВал = Документ.ПриходТМЦ.СуммаЗатратВал; |СуммаПост = Документ.ПриходТМЦ.СуммаПостРубли; |СуммаПостВал = Документ.ПриходТМЦ.СуммаПостВалюта; |Функция Сум = Сумма(Сумма); |Функция СумВал = Сумма(СуммаПостВал*Колво); |Функция СумПост = Сумма(СуммаПост); |Функция СумПостВал = Сумма(СуммаПостВал); |Функция СумЗатр = Сумма(СуммаЗатрат); |Функция СумЗатрВал = Сумма(СуммаЗатратВал);"; Если Группировать1 = 1 Тогда ТекстЗапроса = ТекстЗапроса+" |Группировка ПОСТ;"; КонецЕсли; Если Группировать3 = 1 Тогда ТекстЗапроса = ТекстЗапроса+" |Группировка НалБезНал;"; КонецЕсли; ТекстЗапроса = ТекстЗапроса+" |Группировка ТекущийДокумент; |Группировка ВидТМЦ; |Условие(ВидТМЦ = Вид_Док); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; |
|||
1
insider
26.12.05
✎
02:45
|
Задачу чуть подробнее... т.е. для чего это, как будет использоваться
|
|||
2
insider
26.12.05
✎
02:51
|
+1 в общем случае так работать не будет, если под Вид имеется ввиду методе справочника Вид().
можно так: делаем функцию модуля, например ПроверкаТМЦ() и в ней пишем соотв. условия, далее в запрос вставляем условие, например такое "ПроверкаТМЦ(ТМЦ)=1" - ну чему равно уже сам как-нибудь, если нужа группировка... то имхо никак, только выгрузка в ТЗ и перебирание этой ТЗ в цикле, хотя может быть кто-нибудь еще подскажет. |
|||
3
PashaTP
26.12.05
✎
03:06
|
В оригинале было скрытое поле в ТЧ документа куда прописывался вид справичника ТМЦ использованного в конкретной строке, для экономии убрал поле, теперь не могу в запросе обойтись без него.
А группировку циклами перебора результатов запроса реализовать можно? |
|||
4
PashaTP
26.12.05
✎
03:11
|
1: Задача - Реестр документов прихода ТМЦ по Условию="конкретный вид ТМЦ"
|
|||
5
insider
26.12.05
✎
03:25
|
(4) погоди, конкретный вид ТМЦ (перечисление, справочник или как там у тебя) или конкретный вид справочника (товары, материалы, топливо или опять же что-то еще)?
|
|||
6
insider
26.12.05
✎
03:28
|
+5 если в этом документе (по приходу) все-таки в строках элементы разных справочников... тогда скрытый реквизит и группировка по нему, иначе запрос выкидываем в ТЗ и перебором ТЗ добиавемся результата, имхо первое быстрее отработает
|
|||
7
PashaTP
26.12.05
✎
03:32
|
по рекомендации 2 переработал:
//_____________________________________________________________________________ Функция ОпрВидТМЦ(ТМЦ) Сообщить(СокрЛП(ТМЦ.Вид())); Возврат СокрЛП(ТМЦ.Вид()); КонецФункции //_____________________________________________________________________________ Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Запрос) |Период с Дата1 по Дата2; ... ((сокращаю для экономии места)) |ВидТМЦ = ОпрВидТМЦ(Документ.ПриходТМЦ.ТМЦ); ... Если НЕ (Вид_Док = "--=< по всем >=--") Тогда ТекстЗапроса = ТекстЗапроса+" |Условие(ВидТМЦ = Вид_Док);"; КонецЕсли; ТекстЗапроса = ТекстЗапроса+" |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; ******************* Ошибка: Запрос[8] : Неверно заданный путь 'ОпрВидТМЦ' |
|||
8
account77
26.12.05
✎
03:34
|
(7) Попробуй в этой процедуре использовать
ЗначениеВСтрокуВнутр() Там четвертый параметр вид http://1c.realnet.ru/cgi-bin/forum.cgi?ask=1118 |
|||
9
PashaTP
26.12.05
✎
03:35
|
Видать прийдется все возвращать в исходную, т.е. (6).
|
|||
10
PashaTP
26.12.05
✎
03:40
|
(8) Похоже что функция ОпрВидТМЦ() вообще не может вызваться из запроса.
Можеть ей Експорт поставить- ? |
|||
11
PashaTP
26.12.05
✎
03:49
|
(10) не подействовало :) а жаль.
|
|||
12
insider
26.12.05
✎
03:51
|
(7) нет, так нельзя, можно функцию только в условие пихать, в виде переменной не выйдет
|
|||
13
insider
26.12.05
✎
03:53
|
т.е. ПеременнаяЗапроса=КакаяТоФункция() - так нельзя, можно так:
Условие (МояФункция(ПеременнаяЗапроса)=ЧтоТо) |
|||
14
PashaTP
26.12.05
✎
03:55
|
(12) Ок! Работает, спасибо!
|
|||
15
insider
26.12.05
✎
03:56
|
(14) помогло? ну поздравляю :) правда не увлекайся такими фичами - могут тормозить запросы
|
|||
16
PashaTP
26.12.05
✎
03:57
|
А может в условие можно напрямую поставить определение вида справочника:
... Условие(ВидТМЦ.Вид() = Вид_Док); ... |
|||
17
insider
26.12.05
✎
03:58
|
(16) а кто такое вид_док?
|
|||
18
insider
26.12.05
✎
03:58
|
+17 ну запихни это в функцию, не любит 1С многоэтажные условия
|
|||
19
insider
26.12.05
✎
04:00
|
ответь на один вопрос: тебе нужно отобрать ТМЦ только одного вида (т.е. из одного справочника) или сгруппировать по видам и вывести все? (первое легко, второе - проблема, все написано в (6))
|
|||
20
PashaTP
26.12.05
✎
04:01
|
Вид_Док - неудачное название переменной в которую в диалоге выбирается условие по какому конкретно ТМЦ строить Реест или по всем.
|
|||
21
insider
26.12.05
✎
04:02
|
(20) угумс, значит по всем... плохо, дай подумаю
|
|||
22
PashaTP
26.12.05
✎
04:02
|
нет (16) не работает.
|
|||
23
PashaTP
26.12.05
✎
04:04
|
(21) да вообщем вариант (7) заработал, там и условие по необходимости подставляется или нет - тогда по всем.
|
|||
24
insider
26.12.05
✎
04:06
|
(22) 16 и не должно работать
|
|||
25
PashaTP
26.12.05
✎
04:08
|
Всем спасибо!
Тему можно закрывать. Пока. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |