Имя: Пароль:
1C
1C 7.7
v7: Запросы и построительи ДБФ и Скул
0 Slaventiya
 
06.04.12
22:58
Столкнулся с вот таким запросом в отчете под ДБФ вариантом


   ЗапросОборот = СоздатьОбъект("Запрос");
   ТекстЗапросаОборот ="
   |Период с ДатаНачало по ДатаКонец;  
   |ОбрабатыватьДокументы Проведенные;
   |Товар                    = Документ.РасходнаяРозничная.Товар,            Документ.РасходнаяНакладнаяТ.Товар,            Документ.РасходнаяНакладнаяВозвратТ.Товар;
   |Док                    = Документ.РасходнаяРозничная.ТекущийДокумент,    Документ.РасходнаяНакладнаяТ.ТекущийДокумент,    Документ.РасходнаяНакладнаяВозвратТ.ТекущийДокумент;
   |Контрагент            = Документ.РасходнаяРозничная.Клиент,            Документ.РасходнаяНакладнаяТ.Клиент,            Документ.РасходнаяНакладнаяВозвратТ.Клиент;
   |Менеджер                = Документ.РасходнаяРозничная.Менеджер,        Документ.РасходнаяНакладнаяТ.Менеджер,            Документ.РасходнаяНакладнаяВозвратТ.Менеджер;
   |Кол                    = Документ.РасходнаяРозничная.Количество,        Документ.РасходнаяНакладнаяТ.Количество,        Документ.РасходнаяНакладнаяВозвратТ.Количество;
   |Коэф                    = Документ.РасходнаяРозничная.Коэффициент,        Документ.РасходнаяНакладнаяТ.Коэффициент,        Документ.РасходнаяНакладнаяВозвратТ.Коэффициент;
   |Сумма                    = Документ.РасходнаяРозничная.СуммаБезНалогов,    Документ.РасходнаяНакладнаяТ.Сумма,            Документ.РасходнаяНакладнаяВозвратТ.Сумма;
   |НДС                    = Документ.РасходнаяРозничная.НДСпоСтроке,        Документ.РасходнаяНакладнаяТ.НДСпоСтроке,        Документ.РасходнаяНакладнаяВозвратТ.НДС;
   |Нал                    = Документ.РасходнаяРозничная.Нал,                Документ.РасходнаяНакладнаяТ.Нал,                Документ.РасходнаяНакладнаяВозвратТ.Нал;
   |НП                    = Документ.РасходнаяРозничная.НППоСтроке,        Документ.РасходнаяНакладнаяВозвратТ.СуммаНП;
   |Режим                    = Документ.РасходнаяРозничная.РежимРезерв;
   |Функция РасходКол        = РасходКол)    Когда    (Док.Вид() <>    ""РасходнаяНакладнаяВозвратТ"");
   |Функция Расход        = Расход(Сумма)  Когда    (Док.Вид() <>    ""РасходнаяНакладнаяВозвратТ"");
   |Функция РасходКолВз    = Расход(Кол)    Когда    (Док.Вид() =    ""РасходнаяНакладнаяВозвратТ"");
   |Функция РасходВз        = Расход(Сумма)  Когда    (Док.Вид() =    ""РасходнаяНакладнаяВозвратТ"");
   |Функция СуммаНПВз        = Расход(НП)    Когда    (Док.Вид() =    ""РасходнаяНакладнаяВозвратТ"");
   |Функция СуммаНП        = Расход(НП)    Когда    (Док.Вид() <>    ""РасходнаяНакладнаяВозвратТ"");
   |Функция СуммаНДСВз    = Расход(НДС)    Когда    (Док.Вид() =    ""РасходнаяНакладнаяВозвратТ"");
   |Функция СуммаНДС        = Расход(НДС)    Когда    (Док.Вид() <>    ""РасходнаяНакладнаяВозвратТ"");
   |Функция СумНал        = Сумма(Нал);
   |Условие (Товар        в ВыбТовары);
   |Условие (Контрагент    в ВыбКлиент);
   |Условие (Менеджер        в ВыбМен);
   |Условие (Режим            = РежПровед);    
   |Группировка Контрагент без групп;
   |Группировка Док упорядочить по Док.ДатаДок, Док.ВремяДок;                
   |Группировка Товар без групп;      
   |";

Он работает, в скуле сие в функции возращает 0 без исправления Расход на Сумма, интересует почему....
1 Damash
 
06.04.12
23:03
Функция РасходКол         = РасходКол)

пропущена "(" - это опечатка?
2 Slaventiya
 
06.04.12
23:05
(1) Опечатка
3 andrewks
 
06.04.12
23:06
а какой может быть Расход в накладных?
4 Slaventiya
 
06.04.12
23:09
Суть в том что...

Расход (Credit) - расход значений параметра-ресурса Регистра; - Взято из СП
5 Slaventiya
 
06.04.12
23:11
(3) Вот и мне интересно как
6 andrewks
 
06.04.12
23:18
(5) тебя удивляет, что кривой запрос в кривой программе криво отработал? забей ужо, иди пить пиво, шаббат на дворе
7 Slaventiya
 
06.04.12
23:22
(6) ))) А как же акжем. интерес... но ведь бред жаш
8 Инквизитор
 
06.04.12
23:24
Запрос.ВключитьSQL(1) не пробовали?
9 andrewks
 
06.04.12
23:25
угу, и Запрос.ВключитьБаги(0)
10 Slaventiya
 
06.04.12
23:25
(8) Нет
11 Slaventiya
 
06.04.12
23:30
ИНтересно было бы услышать мнение господина Ёпрст3 по этому поводу
12 andrewks
 
06.04.12
23:36
(11) а что ты хочешь от него услышать?

"Замечание: Типы функций НачОст, КонОст, Приход, Расход можно использовать только с параметрами, указывающими на ресурсы регистров остатков. Для ресурсов регистров остатков другие типы функций вызывать нельзя."
13 Slaventiya
 
06.04.12
23:40
(12)Я уже писал об этом... но сам проверил... работает сволочь
14 andrewks
 
06.04.12
23:41
(13) и что? Форма.ОбработкаОжидания() тоже работает. предлагаешь застрелиться?
15 Slaventiya
 
06.04.12
23:44
(14) Ничего я не предлогают, отстань (ничего личного), мне имнтересно почему
16 AlexNew
 
06.04.12
23:56
(15) По секрету, это для регистров, в терминологии 8 - виртуальных таблиц.
17 Slaventiya
 
07.04.12
00:06
(15) Адуреть ) Секрет ))) Рад, а то что тема про 7, это  наверное так...
18 AlexNew
 
07.04.12
00:11
(17) Что такое план запроса наверно знаете? Я про это говорил..
19 viktor_vv
 
07.04.12
00:14
(16) и (18) Ты кажись путаешь теплое с мягким. И такое ощущение, что ты вообще не понимаешь о чем говоришь.
20 Slaventiya
 
07.04.12
00:17
Вот блин... Спросил на свою голову, причем вразумительного ответа я пока не увидел
21 AlexNew
 
07.04.12
00:22
(19) Правда? Как это выглядеть будет, функции оставим, возьмем только "," в начале.
22 AlexNew
 
07.04.12
00:26
(19) Можно проще, пример что значит это запрос в SQL или как бы он в 8 выглядел?
23 Slaventiya
 
07.04.12
00:29
(20) Ты прокоментировать тему можешь или нет ? Мы не про 8 говорим, а про 7 запролс... причем выполяемый в скуле и дбф варианте...

А читать лекции на тему 8 это к Чистову...
24 Slaventiya
 
07.04.12
00:31
(23) в (22)
25 viktor_vv
 
07.04.12
00:35
(22) Виртуальные таблицы-то причем здесь? Сходсто только в том (и то очень отдаленное), что и этот запрос и виртуальная таблица развернется в более сложный запрос к БД.
А вот план запроса вообще не в тему, потому как это понятие уже уровня СУБД.
26 viktor_vv
 
07.04.12
00:36
(25)+ Причем прочитав (16) у меня сложилось впечатление, что ты ставишь знак равенства между регистром и виртуальной таблицей для регистра.
27 AlexNew
 
07.04.12
00:37
(25) Домой.
(0) Не пойму как они не 0 возвращают???
28 Slaventiya
 
07.04.12
00:39
(27) Понимали бы не спрашивали и не обсуждали
29 AlexNew
 
07.04.12
00:42
(28) Чем тебе сумма не нравится? Это интерпретатор, объяснять долго.
30 Slaventiya
 
07.04.12
00:44
(29) Ты читал тему ? СУММА я поставил, чтобы в скуле работало... до этого было РАСХОД, а запрос к документу обращается....
31 AlexNew
 
07.04.12
00:47
(30) Меня опять обмануть пытаются...
32 Slaventiya
 
07.04.12
00:49
(31) Ой ли ? Зачем ?
33 AlexNew
 
07.04.12
00:55
(32) Сам не понял, но смотреть, извини,не буду.
34 Slaventiya
 
07.04.12
00:59
(33) Ладно... нада спать.. а то пятницой и работой перегруженный мозг бунтует )
35 viktor_vv
 
07.04.12
01:07
Ну чего мучаться, запусти его в скуле, в профайлере посомтри что уходит на сервер.

Вот для документов с функцией расход:

'select  max(SC126.DESCR), max(SC126.PARENTID),DH1157.SP2641,0, min(DT1157.SP1178 )
from  _1SJOURN(NOLOCK) join DH1157(NOLOCK) on _1SJOURN.IDDOC=DH1157.IDDOC left outer join SC126(NOLOCK) on DH1157.SP2641=SC126.ID left outer join DT1157(NOLOCK) on _1SJOURN.IDDOC=DT1157.IDDOC
where _1SJOURN.IDDOCDEF = 1157 and _1SJOURN.DATE_TIME_IDDOC >= ''20111001     0     0   '' and _1SJOURN.DATE_TIME_IDDOC <= ''20111027FHML6O     0   '' and _1SJOURN.CLOSED&1 = 1

Вот там где в select'e 0 стоит это и есть то, во что функция расход превратилась.

А вот для регистра с функцией расход.

select  max(SC124.DESCR), max(SC124.PARENTID),RA1051.SP1052,sum(case when DEBKRED = 1 then RA1051.SP1055 else 0 end), min(RA1051.SP1055 )
from  _1SJOURN(NOLOCK) left outer join RA1051(NOLOCK) on _1SJOURN.IDDOC=RA1051.IDDOC left outer join SC124(NOLOCK) on RA1051.SP1052=SC124.ID
where _1SJOURN.RF1051 = 1 and _1SJOURN.DATE_TIME_IDDOC >= ''20111001     0     0   '' and _1SJOURN.DATE_TIME_IDDOC < ''20111028     0     0   '' and _1SJOURN.CLOSED&1 = 1
group by RA1051.SP1052 '

Здесь уже расход стал

case when DEBKRED = 1 then RA1051.SP1055 else 0 end

Во что там в ДБФ это все транслируется я не знаю.
36 Slaventiya
 
07.04.12
01:19
По хорошему запрос при исполнении вообще ругнуться должен был имхо, ввиду неправильного обращения к функции по регистру по при переменной по документам, но возможн о- при таком исполнении

Кол = Докумен..., Докуент..., Документ... не ругается...
37 AlexNew
 
07.04.12
01:29
(0) Не надо с функцией в методических указаниях есть, что обращаться к данным регистра, теперь ТИИ и - вперед, А то дальше полезет.
38 Slaventiya
 
07.04.12
01:32
(37) Расшифруй )
39 viktor_vv
 
07.04.12
01:34
(37) Ну ТИИ-то тут при чем ? Что полезет ?
Причем здесь косяк с трансляцией текста запроса к корректоности данных в таблицах ?
40 Slaventiya
 
07.04.12
01:35
(37) (39) Извените ха глупый вопрос, что есть ТИИ ?
41 viktor_vv
 
07.04.12
01:37
(40) Тестирование И Исправление .
42 Slaventiya
 
07.04.12
01:40
(41) Спсб, Да уж, причем тут ТИИ вообще не ясно, бред, учитывая что Запрос это чтение ....

Без обид (37) А вы батенька похоже изрядно поднабрались, завязывайте чуш молоть
43 AlexNew
 
07.04.12
01:42
(42) а и Shrink не лечит.
44 viktor_vv
 
07.04.12
01:50
(43) Забыл еще выгрузить и загрузить предложить.
(42) Если есть желание разбираться, для (35) тексты запросов 1С.

Для первого

   ТекстЗапроса = "
   |Период с фдДатаНач по фдДатаКон ;
   |Менеджер = Документ.РасходнаяНакладная.Менеджер ;
   |СуммаПрод = Документ.РасходнаяНакладная.СуммаСНДС ;
   |Группировка Менеджер без групп ;
   |Функция СуммаПродОборот = Расход(СуммаПрод) ;
   |";


Для второго

   ТекстЗапроса = "
   |Период с фдДатаНач по фдДатаКон ;
   |Склад = Регистр.Остатки.Склад ;
   |Кол = Регистр.Остатки.Кво ;
   |Группировка Склад без групп ;
   |Функция КолРасход = Расход(Кол) ;
   |";
45 Slaventiya
 
07.04.12
01:53
Во блин поговорили... Аж 2 часа уже почти ни о чем, похоже это действительно проблема трансляции, причем характерного исключительно в ДБФ варианте, а ля документ делает движения в регистре, значит будем разрешать пользоваться функцией регистра для обращения к документу делающего движение в регистры.
46 AlexNew
 
07.04.12
01:56
(44) Ты - адназначна - маладец!
(45) Читай из регистра, или спроси тех, пачиму ТИИ.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн