Имя: Пароль:
1C
1C 7.7
v7: Использование глобального модуля в запросе
,
0 bananan
 
04.02.13
18:35
В рабочем коде есть такая строка:
ИтКг = ИтКг + (глКгКоэф(ТабТМЦ.ТМЦ)*ТабТМЦ.Кво);
таким образом узнаем вес в килограмах (в данном случае всех товаров по расходной накладной).
Как это сделать в запросе
запрос такой:
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |ТекДок = Регистр.Обороты.ТекущийДокумент;
   |Агент=Регистр.Обороты.Агент;
   |Клиент=Регистр.Обороты.Клиент;
   |Склад=Регистр.Обороты.Склад;
   |ТМЦ = Регистр.Обороты.ТМЦ;
   |Витрина = Регистр.Обороты.ТМЦ.Цена1;
   |Категория4 = Регистр.Обороты.ТМЦ.Цена7;
   |Дохо=Регистр.Обороты.ДоходГрн;
   |РасходКво = Регистр.Обороты.РасходКво;
   |РасходГрн = Регистр.Обороты.РасходГрн;
   |Функция РасходКвоСумма = Сумма(РасходКво);
   |Функция РасходГрнСумма = Сумма(РасходГрн);
   |"+доходтекст+"
   |Функция РасходГрнСуммаВ = Сумма(РасходКво*1.2*Витрина);
   |";
   
   Для н=1 По Группировать.РазмерСписка() Цикл                            
       Если Группировать.Пометка(н)=0 Тогда
           продолжить;
       Конецесли;
       ТекстЗапроса = ТекстЗапроса+"
       |Группировка "+Группировать.ПолучитьЗначение(н)+ " "+БезГруп+";";
   Конеццикла;
   Если (Динамик = 1) и (Диаграмм = 1) Тогда
       ТекстЗапроса = ТекстЗапроса+"
       |Группировка "+Период.ПолучитьЗначение(Период.ТекущаяСтрока())+ ";";
       
   Конецесли;
   ТекстЗапроса = ТекстЗапроса+"
   |Условие(Агент в ВыбАгент);
   |Условие(Клиент в ВыбКлиент);
   |Условие(Склад в ВыбСклад);
   |Условие(ТМЦ в ВыбТМЦ);
   |"//}}ЗАПРОС
У кого есть какие идеи?
1 bananan
 
04.02.13
18:43
+ ко всему прочему текущий запрос работает с регистром, а в регистре количества нет!
2 zladenuw
 
04.02.13
18:51
Функция ПроверитьПроизводителя(Номенклатура)
  Спр.ИспользоватьВладельца(Номенклатура);
  Возврат Спр.НайтиПоРеквизиту("ВидСвойства",ВыбВидСв,0);
КонецФункции
.........
|Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
|Количество = Регистр.ОстаткиТМЦ.Количество;    
|Функция КоличествоКонОст = КонОст(Количество);
|Группировка Номенклатура;
|Условие(ПроверитьПроизводителя(Номенклатура)=1);
........
Спр = СоздатьОбъект("СвойстваНоменклатуры");

копипаст. Вопрос по 1С7.7. Запрос.Товарисчи помогите...
3 Boroda
 
04.02.13
18:54
(1)РасходКво = Регистр.Обороты.РасходКво;
А это не количество в записи по регистру?
4 bananan
 
04.02.13
19:03
строка ИтКг = ИтКг + (глКгКоэф(ТабТМЦ.ТМЦ)*ТабТМЦ.Кво); взята из документа расходная накладная
5 bananan
 
04.02.13
19:04
(2) Это ты к чему?
6 КонецЦикла
 
04.02.13
19:14
(1) Оригинально
Делай перебор документов, будь мужиком!
7 bananan
 
04.02.13
19:19
(6) Тоесть ты предлагаешь из-за одного пункта (вес) написать по новой запрос?
8 this is the end
 
05.02.13
01:46
я бы предложил - не запрос и всякое тм - а просто математику - уровня ... допустим 9 класса СССР)
9 Ёпрст
 
05.02.13
08:56
(0)
|Функция РасходГрнСуммаВ = Сумма(Запрос.РасходКво*1.2*Витрина);
10 bananan
 
05.02.13
10:55
(9) может я чего-то не допонимаю, но мне нужно узнать количество килограм; причем здесь деньги?
11 Ёпрст
 
05.02.13
11:06
(10)

|Функция Кг = Сумма(глКгКоэф(ТМЦ)*Запрос.РасходКво);
12 bananan
 
05.02.13
11:12
(11) Совсем доругое дело; спасибо!
13 bananan
 
05.02.13
12:05
+12 еще небольшой вопрос теперь у меня есть по каждой строке количество килограм, а как эти килограмы просуммировать?
14 Ёпрст
 
05.02.13
12:06
у тебя и так по группировкам есть итоговые количество килограммов.
15 bananan
 
05.02.13
12:09
(14) Не понрял... А как к этому количеству достучаться :( ?
16 Ёпрст
 
05.02.13
12:13
(15)

Запрос.Выполнить(ТекстЗапроса);
...........
Пока.Запрос.Группировка(1)=1 Цикл
   сообщить(Запрос.Кг);
   ...............
   Пока Запрос.Группировка(НужнаяГруппировка)=1 Цикл
            сообщить(Запрос.Кг);
 ..............
17 bananan
 
05.02.13
12:15
(16) сорри , опять торможу :)
18 bananan
 
06.02.13
17:19
+17
Что-то неправильно запрос килограммы считает...
текст запроса такой:
//{{ЗАПРОС(Сформировать)
Период с ВыбНачПериода по ВыбКонПериода;
ТекДок = Регистр.Обороты.ТекущийДокумент;
Агент=Регистр.Обороты.Агент;
Клиент=Регистр.Обороты.Клиент;
Склад=Регистр.Обороты.Склад;
ТМЦ = Регистр.Обороты.ТМЦ;
Витрина = Регистр.Обороты.ТМЦ.Цена1;
Категория4 = Регистр.Обороты.ТМЦ.Цена7;
Дохо=Регистр.Обороты.ДоходГрн;
РасходКво = Регистр.Обороты.РасходКво;
РасходГрн = Регистр.Обороты.РасходГрн;
Функция РасходКвоСумма = Сумма(РасходКво);
Функция РасходГрнСумма = Сумма(РасходГрн);

Функция Доход = Сумма(Дохо);
Функция ДоходВ = Сумма(РасходКво*1.2*Витрина-РасходГрн+Дохо);

Функция РасходГрнСуммаВ = Сумма(РасходКво*1.2*Витрина);
Функция Кг = Сумма(глКгКоэф(ТМЦ)*Запрос.РасходКво);
Группировка ТекДок ;
Условие(Агент в ВыбАгент);
Условие(Клиент в ВыбКлиент);
Условие(Склад в ВыбСклад);
Условие(ТМЦ в ВыбТМЦ);
Выбераю период и по накладных смотрю запрос по данной накладной выдает вес 10 кг, а если открыть эту накладную то там вес 10,79
Если взять модуль документа то там вес считается так:        ИтКг = ИтКг + (глКгКоэф(ТабТМЦ.ТМЦ)*ТабТМЦ.Кво);
вроде так же и в запросе...
может округление там не такое??
19 bananan
 
06.02.13
17:40
Ау! кто-нибудь здесь есть и может помочь?
20 bananan
 
06.02.13
17:44
Глюк здесь не в округлении, вот в одной накладной вес (по накладлной) 14.14 кг; запрос выдает 15 кг
21 Ёпрст
 
06.02.13
17:46
(20)
|Функция Кг = Сумма(РасходГрн-РасходГрн+глКгКоэф(ТМЦ)*Запрос.РасходКво);
22 bananan
 
06.02.13
17:46
+(20) лругая накладная по накладной вес 54.9 кг, запрос выдает 53 кг!
23 bananan
 
06.02.13
17:47
(21) попробую так
24 bananan
 
06.02.13
17:48
+(23) но, не понял откуда такая формула?
25 bananan
 
06.02.13
17:50
проверил теперь запрос выдает такое же количество кг как и документ, Ёпрст, почему формула такая??
26 Ёпрст
 
06.02.13
17:50
(24)проверь сперва, вопросы потом
27 Ёпрст
 
06.02.13
17:52
(25) Функция при расчете точности в запросе бер1ёт её из переменной в аргументе функции. У тебя там нет переменной - точность 0. Введя переменную РасходГрн, точность вычисления функции будет как у РасходГрн..
28 bananan
 
06.02.13
17:58
(27) Спасибо, постараюсь запомнить эту тонкость
29 bananan
 
06.02.13
18:49
непонятка вот кусок кода:
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;
   Сообщить(ТекстЗапроса);
   
   ккг = Запрос.кг;
тоесь Запрос.кг уже должно быть доступно?
выдает ошибку:
Поле агрегатного объекта не обнаружено (кг)
В чем лажа?
30 Classic
 
06.02.13
19:16
(27)
Век живи - век учись
31 sapphire
 
06.02.13
19:31
(29) Выборка не спозиционирована
32 Cthulhu
 
06.02.13
19:52
(31): спозиционирована. должно дать итоговое значение.
33 sapphire
 
06.02.13
19:57
(32) Мож туплю, но в функции этой странная переменная запрос.