![]() |
![]() |
![]() |
|
Не могу разобраться с запросом | ☑ | ||
---|---|---|---|---|
0
bananan
14.12.08
✎
10:45
|
Код такой (2 запроса) работает:
А хотелось бы чтобы запрос был один. Здесь сделал код таким: ТекстЗапроса=" | Период с ДатаД По ДатаД; | ФирмаЗ = Регистр.ПартииТоваров.Фирма; | ТоварЗ = Регистр.ПартииТоваров.Товар; | Стоимость = Регистр.ПартииТоваров.Стоимость; | Кол = Регистр.ПартииТоваров.ОстатокТовара; | ФирмаС=Регистр.ОстаткиТоваров.Фирма; | Склад=Регистр.ОстаткиТоваров.Склад; | ТоварС=Регистр.ОстаткиТоваров.Товар; | КолС=Регистр.ОстаткиТоваров.ОстатокТовара; | Группировка ТоварС; | Группировка Склад Все ВошедшиеВЗапрос; | Группировка ТоварЗ; | Функция КонКол = КонОст(Кол); | Функция КонСтоим = КонОст(Стоимость); |"; Флаг = Запрос.Выполнить(ТекстЗапроса); Если Флаг = 0 Тогда Возврат; КонецЕсли; // очистити залишки!! ТоварБ.ВыбратьЭлементы(); Пока ТоварБ.ПолучитьЭлемент() = 1 Цикл ТоварБ.Остатки = 0; ТоварБ.Показ = 0; ТоварБ.Записать(); КонецЦикла; // курс долара Долар = СоздатьОбъект("Справочник.Валюты"); Долар.ИспользоватьДату(ДатаДок); Долар.НайтиПоКоду("840"); Пока (Запрос.Группировка("ТоварЗ")=1) ИЛИ (Запрос.Группировка("ТоварС")=1) Цикл Если Запрос.ТоварЗ.ЭтоГруппа() = 1 Тогда Продолжить; Но все выдает мне: Пока (Запрос.Группировка("ТоварЗ")=1) ИЛИ (Запрос.Группировка("ТоварС")=1) Цикл "Не было обращения к старшим уровням выборки." |
|||
1
Темный Эльф
14.12.08
✎
10:50
|
|Период с ДатаД По ДатаД;
|Фирма = Регистр.ПартииТоваров.Фирма,Регистр.ОстаткиТоваров.Фирма; |Товар = Регистр.ПартииТоваров.Товар,Регистр.ОстаткиТоваров.Товар; |Стоимость = Регистр.ПартииТоваров.Стоимость; |Кол = Регистр.ПартииТоваров.ОстатокТовара; |Склад=Регистр.ОстаткиТоваров.Склад; |КолС=Регистр.ОстаткиТоваров.ОстатокТовара; |Группировка Товар; |Группировка Склад Все ВошедшиеВЗапрос; |Функция КонКол = КонОст(Кол); |Функция КонКол1 = КонОст(КолС); |Функция КонСтоим = КонОст(Стоимость); |"; |
|||
2
bananan
14.12.08
✎
10:52
|
Выдает:
Пока (Запрос.Группировка("ТоварЗ")=1) ИЛИ (Запрос.Группировка("ТоварС")=1) Цикл {Документ.РасходнаяНакладная.Форма.Модуль(79)}: Неверное имя группы 'ТоварЗ' в функции Группировка. |
|||
3
Темный Эльф
14.12.08
✎
10:53
|
(2)Правильно выдает. Ты текст запроса прочти сначала.
|
|||
4
bananan
14.12.08
✎
11:01
|
Прочитал. Баг увидел. Но....
Вставляю в код: Сообщить(Запрос.Склад+"="+Запрос.КонКол1); ... ничего не Сообщает когда вставли такой код: Сообщить(Запрос.Склад.Наименование+"="+Запрос.КонКол1); то выдает =2 ну и т.д. выдает видимо остатки на складе а имя склада нет... |
|||
5
ВторНик
14.12.08
✎
11:04
|
Сообщить(""+Запрос.Склад.Наименование+"="+Запрос.КонКол1);
|
|||
6
bananan
14.12.08
✎
11:12
|
(5) Выдает:
=2 =2 =1 т.е. наименование склада не показывает... |
|||
7
bananan
14.12.08
✎
11:18
|
Так как получить наименование склада ?
|
|||
8
AcaGost
14.12.08
✎
11:21
|
Пока Группировка("Склад") = 1 Цикл
.................................. |
|||
9
PR
14.12.08
✎
11:22
|
Бред какой-то.
Код полностью напиши. И доллар пишется с двумя л. |
|||
10
bananan
14.12.08
✎
11:24
|
И еще, на сколько я понял, он выдает остатки только по одному складу. А у меня складов два.
|
|||
11
bananan
14.12.08
✎
11:26
|
(9) полный код:
ТоварБ = СоздатьОбъект("Справочник.Номенклатура"); НачатьТранзакцию(); Запрос = СоздатьОбъект("Запрос"); ДатаД=РабочаяДата(); ТекстЗапроса=" |Период с ДатаД По ДатаД; |Фирма = Регистр.ПартииТоваров.Фирма,Регистр.ОстаткиТоваров.Фирма; |Товар = Регистр.ПартииТоваров.Товар,Регистр.ОстаткиТоваров.Товар; |Стоимость = Регистр.ПартииТоваров.Стоимость; |Кол = Регистр.ПартииТоваров.ОстатокТовара; |Склад=Регистр.ОстаткиТоваров.Склад; |КолС=Регистр.ОстаткиТоваров.ОстатокТовара; |Группировка Товар; |Группировка Склад Все ВошедшиеВЗапрос; |Функция КонКол = КонОст(Кол); |Функция КонКол1 = КонОст(КолС); |Функция КонСтоим = КонОст(Стоимость); |"; Флаг = Запрос.Выполнить(ТекстЗапроса); Если Флаг = 0 Тогда Возврат; КонецЕсли; // очистити залишки!! ТоварБ.ВыбратьЭлементы(); Пока ТоварБ.ПолучитьЭлемент() = 1 Цикл ТоварБ.Остатки = 0; ТоварБ.Показ = 0; ТоварБ.Записать(); КонецЦикла; // курс долара Долар = СоздатьОбъект("Справочник.Валюты"); Долар.ИспользоватьДату(ДатаДок); Долар.НайтиПоКоду("840"); Пока Запрос.Группировка("Товар")=1 Цикл Если Запрос.Товар.ЭтоГруппа() = 1 Тогда Продолжить; Иначе Конкол = Запрос.Конкол; Если Запрос.Конкол = 0 Тогда Конкол = 1000000; КонецЕсли; Сообщить(""+Запрос.Склад.Наименование+" товар с кодом "+Запрос.Товар.Код+"="+Запрос.КонКол1); ТоварБ.НайтиПоКоду(Запрос.Товар.Код); Цен = СоздатьОбъект("Справочник.Цены"); Цен.ИспользоватьДату(ДатаДок); Цен.ИспользоватьВладельца(ТоварБ.ТекущийЭлемент()); Цен.НайтиПоНаименованию("Закупівельна"); ТоварБ.ЦенаГРН = Запрос.КонСтоим/Конкол; ТоварБ.Остатки = Запрос.КонКол; Сообщить(Запрос.Склад); ТоварБ.ЦенаД = ТоварБ.ЦенаГРН/Долар.Курс; ТоварБ.ОЗЦ = Цен.Цена; ТоварБ.ОЗЦгрн = Цен.Цена*7.5; ТоварБ.Показ = 1; ТоварБ.ОМБ = Запрос.КонСтоим/Конкол/5.5*7.5; ТоварБ.Записать(); КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию(); А доллар по-украински с одной "л" |
|||
12
PR
14.12.08
✎
11:29
|
(11) И где у тебя группировка по складу после группировки по товару?
ЗЫ: ладно, хоть не долр :)) |
|||
13
AcaGost
14.12.08
✎
11:30
|
(11) ->(8)
|
|||
14
bananan
14.12.08
✎
11:31
|
(12) а где ее вставить? Внутри группировки по товару или же снаружи?
|
|||
15
Темный Эльф
14.12.08
✎
11:32
|
+(12)И смотри, у тебя в запросе две функции остатка - остаток по регистру партий и остаток по регистру остатков. В разрезе складов у тебя только второй.
|
|||
16
Темный Эльф
14.12.08
✎
11:33
|
(14)Внутри
|
|||
17
bananan
14.12.08
✎
11:33
|
Все всем спасибо за помощь, вроде разобрался....
|
|||
18
bananan
14.12.08
✎
11:34
|
(15) В разрезе складов как раз и нужен второй
|
|||
19
bamanan
14.12.08
✎
15:47
|
Попытка
ДвиженияДокумент.Отбор.Регистратор.Установить(СсылкаДокумент); Выполнить(Элемент.АлгоритмПроведения); ДвиженияДокумент.Записать(); Исключение Сообщить("Ошибка при проведении "+СсылкаДокумент+": "+ОписаниеОшибки(),СтатусСообщения.Внимание); Если ПрерыватьПриОшибке Тогда Прервать; КонецЕсли; КонецПопытки; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |