Имя: Пароль:
1C
 
Не могу разобраться с запросом
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
Попытка
               ДвиженияДокумент.Отбор.Регистратор.Установить(СсылкаДокумент);
               Выполнить(Элемент.АлгоритмПроведения);
               ДвиженияДокумент.Записать();
           Исключение
               Сообщить("Ошибка при проведении "+СсылкаДокумент+": "+ОписаниеОшибки(),СтатусСообщения.Внимание);
               Если ПрерыватьПриОшибке Тогда
                   Прервать;
               КонецЕсли;
           КонецПопытки;