|
v7: Запрос в 7.7 по 2-м складам | ☑ | ||
---|---|---|---|---|
0
ShadowMind
01.11.11
✎
10:58
|
Помогите разобраться с запросом в 7.7. Задача - получить список номенклатуры, по которой есть остатки по 2-м складам.
|
|||
1
ShadowMind
01.11.11
✎
11:01
|
код такой
ТекстЗапросаОстатков = " |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура; |Количество = Регистр.ОстаткиТМЦ.Количество; |Скл = Регистр.ОстаткиТМЦ.Склад; |СклТип = Регистр.ОстаткиТМЦ.Склад.Тип; |Функция КоличествоКонОст = КонОст(Количество); |Группировка Скл; | |Группировка Номенклатура без групп; |Условие(Скл = Склад);"; ЗапросПоОстаткам = СоздатьОбъект("Запрос"); Если ЗапросПоОстаткам.Выполнить(ТекстЗапросаОстатков) = 0 Тогда Возврат; КонецЕсли; СписокНоменклатуры = СоздатьОбъект("СписокЗначений"); Пока ЗапросПоОстаткам.Группировка(1) = 1 Цикл Пока ЗапросПоОстаткам.Группировка(2) = 1 Цикл Если ЗапросПоОстаткам.КоличествоКонОст > 0 Тогда СписокНоменклатуры.ДобавитьЗначение(ЗапросПоОстаткам.Номенклатура); КонецЕсли; КонецЦикла; КонецЦикла; |
|||
2
ShadowMind
01.11.11
✎
11:03
|
Проблема состоит в том, что когда я пытаюсь добавить в условие "Условие((Скл = Склад1) Или (Скл = Склад2));" у меня выдается пустой результат запроса.
Что я делаю не так? |
|||
3
ShturmanJorj
01.11.11
✎
11:05
|
А почему не создать списокЗначений Склады, куда поместить Склад1 и склад2 и условие(Склад в Склады)
|
|||
4
FN
01.11.11
✎
11:06
|
склады в список
Условие(Скл в списокскладов) |
|||
5
1Сергей
01.11.11
✎
11:06
|
список значений ещё не предлагали?
|
|||
6
ShadowMind
01.11.11
✎
11:10
|
Список значений тоже пробовал, вот так:
Склад1 = СоздатьОбъект("Справочник.Склады"); Склад1.ВыбратьЭлементы(); Склад1.НайтиПоКоду(" 5",0); Склад2 = СоздатьОбъект("Справочник.Склады"); Склад2.ВыбратьЭлементы(); Склад2.НайтиПоКоду(" 1",0); Склады = СоздатьОбъект("СписокЗначений"); Склады.ДобавитьЗначение(Склад1); Склады.ДобавитьЗначение(Склад2); ТекстЗапросаОстатков=ТекстЗапросаОстатков + "Условие(Скл В Склады);"; Может я неправильно значения передаю?... |
|||
7
ЧеловекДуши
01.11.11
✎
11:12
|
Однозначно автору за книги :)
Поди на 8-ке так же пишет :DDDD |
|||
8
ДенисЧ
01.11.11
✎
11:13
|
Склады.ДобавитьЗначение(Склад1.ТекущийЭлемент());
Склады.ДобавитьЗначение(Склад2.ТекущийЭлемент()); это как минимум |
|||
9
Ёпрст
01.11.11
✎
11:13
|
(6)
Склад = СоздатьОбъект("Справочник.Склады"); Если Склад.НайтиПоКоду("5",0)=1 Тогда Склады.ДобавитьЗначение(Склад.ТекущийЭлемент()); КонецЕсли; Если Склад.НайтиПоКоду("1",0)=1 Тогда Склады.ДобавитьЗначение(Склад.ТекущийЭлемент()); КонецЕсли; |
|||
10
ShadowMind
01.11.11
✎
11:14
|
(7) На семерке не писал до этого, поэтому использую схемы, которые увидел в тексте... на восьмерке я вообще такими схемами не пользуюсь...
|
|||
11
ЧеловекДуши
01.11.11
✎
11:14
|
Склады = СоздатьОбъект("СписокЗначений");
Склад1 = СоздатьОбъект("Справочник.Склады"); Склад1.НайтиПоКоду("5"); Склады.ДобавитьЗначение(Склад1.ТекущийЭлемент()); Склад2.НайтиПоКоду("1"); Склады.ДобавитьЗначение(Склад1.ТекущийЭлемент()); Вот так |
|||
12
ЧеловекДуши
01.11.11
✎
11:15
|
(10)8-ка вообще это выходец из 7-ки, нечего изобретать.
|
|||
13
ЧеловекДуши
01.11.11
✎
11:15
|
+(11) Склад2 замени на Склад1
|
|||
14
ЧеловекДуши
01.11.11
✎
11:16
|
+(10)Ты в 8-ке тоже объекты добавляешь?
|
|||
15
ShadowMind
01.11.11
✎
12:40
|
Спасибо, что показали как список передавать, теперь у меня на строку
Пока ЗапросПоОстаткам.Группировка(2) = 1 Цикл ошибка вылетает: "Не было обращения к старшим уровням выборки." кто расскажет о чем это? ну и как исправить... |
|||
16
ShadowMind
01.11.11
✎
12:43
|
(14) На восьмерке я бы написал такой код:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.Номенклатура, | СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад В (&Склады)) КАК ТоварыНаСкладахОстатки | |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстатки.Номенклатура"; Запрос.УстановитьПараметр("Склады", мСклады); мСклады = Новый СписокЗначений; мСклады.Добавить(Справочники.Склады.НайтиПоКоду(" 5"); мСклады.Добавить(Справочники.Склады.НайтиПоКоду(" 1"); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); СписокНоменклатуры = Новый СписокЗначений; Пока Выборка.Следующий() Цикл Если Выборка.КоличествоОстаток > 0 Тогда СписокНоменклатуры.Добавить(Выборка.Номенклатура); КонецЕсли; КонецЦикла; И в восьмерке я в список передаю ссылки на найденные объекты. Что в семерке конструкция НайтиПоКоду("5") получает объект мне невдомек, так как в 8-ке это ссылка... |
|||
17
Ёпрст
01.11.11
✎
12:54
|
(15) а что не понятно в фразе "Не было обращения к старшим уровням выборки."
ты же первую группировку не обходишь, а пытаешься поиметь значения вложенной. |
|||
18
ShadowMind
01.11.11
✎
13:51
|
(17) Скажем так... Я понимаю смысл ошибки, вот только что она значит в контексте 1С7.7, мне не совсем понятно... Я привык работать с восьмеркой, и там я группировки обхожу только при использовании итогов, но вот как делается обход результата запроса в 7.7 мне не понято...
Поэтому вопрос еще открыт: Что у меня в коде делается неправильно, что надо исправить? Знакомых "семерошников" у меня нет, поэтому вся надежда на Вас, дорогие форумчане... |
|||
19
Ёпрст
01.11.11
✎
13:53
|
(18) обойти вышестоящую группировку вестимо, там же по-русски ошибку тебе пишет 1с-ина.
|
|||
20
Ёпрст
01.11.11
✎
13:54
|
||||
21
ShadowMind
01.11.11
✎
13:57
|
(19)(20) То есть нужно просто обратиться к 1-й группировке?
|
|||
22
Ёпрст
01.11.11
✎
13:58
|
(21) какой догадливый
|
|||
23
ShadowMind
01.11.11
✎
13:58
|
Тогда почему в случае |Условие(Скл = Склад); 1с-ина мне ошибку не выдает?
|
|||
24
1Сергей
01.11.11
✎
14:03
|
(23) а почему должна выдавать?
|
|||
25
Ёпрст
01.11.11
✎
14:03
|
(23) и на основании чего должна быть ошибка ?
|
|||
26
ShadowMind
01.11.11
✎
14:41
|
(24)(25) А почему бы и нет?
|
|||
27
ShadowMind
01.11.11
✎
14:43
|
Проблему решил радикально... убрал в запросе группировку по складам, ну и соответственно в самом коде 2-ю группировку...
|
|||
28
Ёпрст
01.11.11
✎
14:43
|
(26)пора бы тебе уже наконец читать ЖКК.
|
|||
29
ShadowMind
01.11.11
✎
14:43
|
Спасибо всем, кто помогал...
|
|||
30
ShadowMind
01.11.11
✎
14:44
|
(28) ЖКК уже позапрошлый век, если 8.2 считать текущим...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |