|
v7: Запрос по строкам документа | ☑ | ||
---|---|---|---|---|
0
1CLOH
20.10.11
✎
13:35
|
Осваиваю язык запросов.
Задача - найти все документы определенного типа, содержащие в табличной части определенную партию товара. Нижеприведенный код просто выдает все документы за период без разницы, содержится ли в нем партия или нет... В справочнике партий физически такой элемент есть. Спр = СоздатьОбъект("Справочник.партии"); Спр.НайтиПоКоду("117",0); ЗапросПоДокументам = СоздатьОбъект("Запрос"); ТекстЗапроса = " |Период с ДатаПН по ДатаВП; |ДокументВП = Документ.ВозвратПоставщику.ТекущийДокумент; |Партия = Документ.ВозвратПоставщику.ТекущийДокумент.Партия; |Группировка ДокументВП; |Условие (Партия = Спр.ТекущийЭлемент()); "; Если ЗапросПоДокументам.Выполнить(ТекстЗапроса) = 1 Тогда Пока ЗапросПоДокументам.Группировка("ДокументВП") = 1 Цикл Сообщить(ЗапросПоДокументам.ДокументВП); КонецЦикла; КонецЕсли; В чем ошибся ? |
|||
1
sanja26
20.10.11
✎
13:44
|
Партия - реквизит документа или Табличной части?
|
|||
2
1CLOH
20.10.11
✎
13:45
|
Реквизит табличной части
|
|||
3
1Сергей
20.10.11
✎
13:48
|
|Партия = Документ.ВозвратПоставщику.Партия;
|
|||
4
1CLOH
20.10.11
✎
13:51
|
(3)
Пробовал, запрос тогда ничего не возвращает, хотя за период документ такого типа с контрольной партией есть. |
|||
5
1CLOH
20.10.11
✎
13:51
|
Бинарник 1С - 27-й
|
|||
6
viktor_vv
20.10.11
✎
13:51
|
Че-то я сомневаюсь.
ласЭлемент117 = "" ; Если Спр.НайтиПоКоду("117",0) = 1 Тогда ласЭлемент117 = Спр.ТекущийЭлемент(); Иначе Сообщить("Ну нету элемента с кодом 117") ; Возврат ; КонецЕсли ; |Условие (Партия = ласЭлемент117); |
|||
7
sanja26
20.10.11
✎
13:52
|
Если реквизит ТЧ, то и проверять надо реквизит строки
|
|||
8
Волесвет
20.10.11
✎
13:56
|
не получается запросом, делай без него
|
|||
9
1Сергей
20.10.11
✎
13:57
|
Кстати. Не знаю как у Вас, в Вашей базе. А у нас серии кодов у партий в пределах подчинения. А значит "Спр.НайтиПоКоду("117",0);" - полный бред
|
|||
10
1CLOH
20.10.11
✎
13:57
|
(8)
А на кой тогда зарезервированное слово "СтрокаДокумента" в языке запросов ? Но при его использовании 1С-ка ругается... |
|||
11
1CLOH
20.10.11
✎
13:58
|
(9)
Да и в той на которой учусь - тоже бред, но пример выше ведь учебный, просто на правильность построения запроса. |
|||
12
filh
20.10.11
✎
13:58
|
в функцию вынеси
|
|||
13
1Сергей
20.10.11
✎
13:58
|
(11) на то он и пример. А партий с кодом "117" может быть больше одной
|
|||
14
viktor_vv
20.10.11
✎
13:59
|
(13) + 1.
|
|||
15
1CLOH
20.10.11
✎
13:59
|
(13) одна она там, сам руками создал в процессе эксперимента приходным документом
|
|||
16
1CLOH
20.10.11
✎
14:00
|
(12) в функцию ? я думал они для вычисления итогов и прочего, а не для заглядывания в табличные части документов. Можно пример ?
|
|||
17
1CLOH
20.10.11
✎
14:02
|
Мда, говорили мне бывалые люди, что в 7-ке язык запросов - полный глюков бред, но чтоб настолько...
|
|||
18
Волесвет
20.10.11
✎
14:02
|
(10) это предопределенная группировка
|
|||
19
1Сергей
20.10.11
✎
14:03
|
(15) Судя по вопросу ты не очень опытный семерошник. И я на твоем месте не был бы так уверен в этом
|
|||
20
viktor_vv
20.10.11
✎
14:03
|
(17) Откуда там глюки. У всех нормально работает, у одного тебя не работает.
|
|||
21
Волесвет
20.10.11
✎
14:03
|
|Партия = Документ.ВозвратПоставщику.ТекущийДокумент.Партия; - бред
|Условие (Партия = Спр.ТекущийЭлемент()); - имхо хрень |
|||
22
viktor_vv
20.10.11
✎
14:04
|
Так еще проверь.
ласЭлемент117 = "" ; Если Спр.НайтиПоКоду("117",0) = 1 Тогда ласЭлемент117 = Спр.ТекущийЭлемент(); Сообщить(""+ласЭлемент117.Владелец); Иначе Сообщить("Ну нету элемента с кодом 117") ; Возврат ; КонецЕсли ; |
|||
23
viktor_vv
20.10.11
✎
14:08
|
А еще лучше кинь на форму реквизит диалога, выбери там партию вручную и в условие вставь. Чтоб быть увереным что условие отрабатывается.
|
|||
24
1CLOH
20.10.11
✎
14:08
|
(22) вывело наименование элемента справочника (контрольную партию) и наименование элемента из спр. ТМЦ в качестве владельца
|
|||
25
1Сергей
20.10.11
✎
14:09
|
(24) а должно было вывести только Владельца
|
|||
26
Волесвет
20.10.11
✎
14:11
|
партиск="";
СпрП = СоздатьОбъект("Справочник.партии"); Если СпрП.НайтиПоКоду("117",0) = 1 Тогда партиск = СпрП.ТекущийЭлемент(); Иначе Сообщить("Не найдено") ; Возврат ; КонецЕсли ; ЗапросПоДокументам = СоздатьОбъект("Запрос"); ТекстЗапроса = " |Период с ДатаПН по ДатаВП; |ДокументВП = Документ.ВозвратПоставщику.ТекущийДокумент; |Партия = Документ.ВозвратПоставщику.Партия; |Группировка ДокументВП; |Условие (Партия = партиск); "; |
|||
27
1CLOH
20.10.11
✎
14:11
|
(25) сори, у меня в Сообщить был указан вывод и элемента и владельца
|
|||
28
1Сергей
20.10.11
✎
14:12
|
(26) оно может найти не ту партию
|
|||
29
ЧеловекДуши
20.10.11
✎
14:13
|
(28)Это уже детали кодов... неважно
|
|||
30
viktor_vv
20.10.11
✎
14:13
|
А у тебя тип значения реквизита партия какой в документе ?
|
|||
31
Волесвет
20.10.11
✎
14:13
|
(28) может)
|
|||
32
1Сергей
20.10.11
✎
14:13
|
(27) допустим, ты нашел партию. Попробуй
|Группировка Документ; |Группировка СтрокаДокумента; |
|||
33
Волесвет
20.10.11
✎
14:14
|
имхо ТС троль
|
|||
34
1CLOH
20.10.11
✎
14:20
|
(33) Я не троль, а ученик.
(23) Если кинуть на форму выбор партии - тогда запрос работает. В справочнике Партий всего до 200 элементов, только что пересмотрел все - элемент с кодом 177 только один. В чем причина ? |
|||
35
Erhov_egor
20.10.11
✎
14:20
|
что означает твой ник 1CLOH?
|
|||
36
1CLOH
20.10.11
✎
14:21
|
Пересмотрел естественно в режиме вывода всех элементов и групп
|
|||
37
1CLOH
20.10.11
✎
14:22
|
(35) При чем тут мой ник ? В данном случае означает мой уровень знаний в 1С.
|
|||
38
Erhov_egor
20.10.11
✎
14:23
|
(37)юморной парень
|
|||
39
1Сергей
20.10.11
✎
14:23
|
(36) покажи получившийся код
|
|||
40
1CLOH
20.10.11
✎
14:23
|
сейчас
|
|||
41
viktor_vv
20.10.11
✎
14:23
|
(34) В этом : Если Спр.НайтиПоКоду("117",0) = 1 Тогда
|
|||
42
viktor_vv
20.10.11
✎
14:24
|
(36) Какие еще группы в справочнике партий ?
|
|||
43
Erhov_egor
20.10.11
✎
14:26
|
кто нибудь удалит элемент справочника и работать не будет,объявляй перем и присвой че надо
|
|||
44
1CLOH
20.10.11
✎
14:40
|
Прошу прощения, отвлекли.
(39) Спр = СоздатьОбъект("Справочник.партии"); //ИскомаяПартия = Спр.НайтиПоКоду("117",0); ИскомаяПартия = ВыборПартии; //Сообщить("------ " + Спр.ТекущийЭлемент()); ЗапросПоДокументам = СоздатьОбъект("Запрос"); ТекстЗапроса = " |Период с ДатаПН по ДатаВП; |ДокументВП = Документ.ВозвратПоставщику.ТекущийДокумент; |Партия = Документ.ВозвратПоставщику.Партия; |Группировка ДокументВП; |Условие (Партия = ИскомаяПартия);"; ЗапросПоДокументам.Выполнить(ТекстЗапроса); Пока ЗапросПоДокументам.Группировка("ДокументВП") = 1 Цикл Сообщить(ЗапросПоДокументам.ДокументВП + " --- " + ЗапросПоДокументам.Партия); КонецЦикла; (42) В типовой бухконфигурации (на которой учусь) справочник партий сделан двухуровневым. Для чего - не знаю. |
|||
45
Erhov_egor
20.10.11
✎
14:41
|
выборпартии че такое?
|
|||
46
1CLOH
20.10.11
✎
14:42
|
(23) попросил выкинуть на форму поле выбора партии руками, это еге идентификатор
|
|||
47
Erhov_egor
20.10.11
✎
14:44
|
ну и че работает?
|
|||
48
Erhov_egor
20.10.11
✎
14:44
|
че еще нужно то?
|
|||
49
1CLOH
20.10.11
✎
14:44
|
Фрагмент кода выше - работает нормально.
Если партию подставлять путем "...НайтиПоКоду()" - вроде как находит, но в запросе использует непонятно как, т.к. выводятся ВСЕ документы за период |
|||
50
viktor_vv
20.10.11
✎
14:45
|
А теперь вот так.
//ИскомаяПартия = Спр.НайтиПоКоду("117",0); ИскомаяПартия = "" ; Если Спр.НайтиПоКоду("117",0) = 1 Тогда ИскомаяПартия = Спр.ТекущийЭлемент(); Сообщить(""+ИскомаяПартия.Владелец); Иначе Сообщить("Ну нету элемента с кодом 117") ; Возврат ; КонецЕсли ; //ИскомаяПартия = ВыборПартии; //Сообщить("------ " + Спр.ТекущийЭлемент()); |
|||
51
Erhov_egor
20.10.11
✎
14:47
|
а еще че надо?все работает же,разница тебе из справочника брать или из диалога,вообще нах диалог не нужен просто переменная туда значение ручками пишешь и все готово
|
|||
52
Erhov_egor
20.10.11
✎
14:48
|
а ответ тебе был дан еще в (6) на (49)
|
|||
53
1CLOH
20.10.11
✎
14:49
|
(50) вывело наименование "ТестовыйТовар" - это элемент из спр. ТМЦ, к которому подчинен данный элемент из спр. партий...
(51) Мне нужно, т.к. например при удалении приходного документа при партионном учете по логике нужно удалять и партию, которую он создает с проверкой присутствия данной партии в расходных документах... Ладно, давайте пожалуй отдохнем. |
|||
54
viktor_vv
20.10.11
✎
14:51
|
Так запрос-то отработал ? Просто если до этого ты так делал : //ИскомаяПартия = Спр.НайтиПоКоду("117",0); То в Искомая патия у тебя число 1 было.
|
|||
55
1Сергей
20.10.11
✎
14:51
|
(53) ну, дык. Эта партия должна храниться в приходном документе. Зачем её искать по коду?
|
|||
56
1Сергей
20.10.11
✎
14:53
|
(54) Кстати, да. Откуда у него эта строчка взялась не понятно
|
|||
57
1CLOH
20.10.11
✎
14:53
|
(54) убивая себя об стену...
Таки да. Вот блин. переменная ИскомаяПартия получается хранила результат поиска, а не искомый элемент справочника. Все, разобрались. Всем спасибо :-) |
|||
58
viktor_vv
20.10.11
✎
14:54
|
(57) Твою ж мать ... :).
|
|||
59
Erhov_egor
20.10.11
✎
14:55
|
(55)я думаю вопрос закрыт
|
|||
60
1CLOH
20.10.11
✎
15:10
|
Так точно, закрыт. Прошу прощения что морочил всем голову, глаз замылился, код перед глазами уже плывет.
|
|||
61
1CLOH
20.10.11
✎
15:44
|
Прошу прощения, есть еще один вопрос.
Как в запросе перечислить несколько типов документов, подлежащих просмотру на наличие в их табличной части определенной партии ? |ИскомыйДокумент = Документ.ВозвратПоставщику.ТекущийДокумент, | Документ.РасходнаяНакладная.ТекущийДокумент; Так ? |
|||
62
viktor_vv
20.10.11
✎
15:47
|
Да. И остальные переменные также описывай (партии).
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |