|
v7: 1sqlite рушит предприятие | ☑ | ||
---|---|---|---|---|
0
wsxedc83
07.12.12
✎
00:53
|
Имеется запрос:
//Получаем запрос: ТЗ = запрос.ВыполнитьЗапрос(" |select | (case when ДокЗаявка.ДокОснование = :Док~ Then :ВидДокумента.ЗаявкаПокупателя || ЗаявкиРег.ЗаявкаПокупателя else ДокЗаявка.ДокОснование end) [Основание :Документ], | ЗаявкиРег.ЗаявкаПокупателя [Заявка :Документ.ЗаявкаПокупателя], | Заказы.ЗаказПоставщику [Заказ :Документ.ЗаказПоставщику], | Поступление.iddoc [Пост :Документ.ПоступлениеТМЦ], | Реализация.iddoc [Реал :Документ.Реализация] |FROM | | (SELECT | ЗаявкаПокупателя, | sum(КоличествоРасход) Количество | FROM | РегистрИтоги_Заявки WHERE period = :ДатаИтогвНаКонецПрошлогоПериода | GROUP BY ЗаявкаПокупателя | HAVING SUM(КоличествоРасход)<>0) ЗаявкиРег | | | | LEFT JOIN Документ_ЗаявкаПокупателя ДокЗаявка on ДокЗаявка.iddoc = ЗаявкиРег.ЗаявкаПокупателя | LEFT JOIN Регистр_ЗаказыЗаявки ЗаказыЗаявки on ЗаказыЗаявки.ЗаявкаПокупателя = ЗаявкиРег.ЗаявкаПокупателя | LEFT JOIN Регистр_Заказы Заказы on Заказы.ЗаказПоставщику = ЗаказыЗаявки.ЗаказПоставщику | LEFT JOIN Документ_ПоступлениеТМЦ Поступление on Поступление.ДокОснование = :ВидДокумента.ЗаказПоставщику || ЗаказыЗаявки.ЗаказПоставщику | LEFT JOIN Документ_Реализация Реализация on Реализация.ДокОснование = :ВидДокумента.ЗаявкаПокупателя || ЗаявкиРег.ЗаявкаПокупателя |inner join | Журнал Жур on ((Жур.iddoc = ЗаявкиРег.ЗаявкаПокупателя) OR (Жур.iddoc = Поступление.iddoc) OR (Жур.iddoc = Поступление.iddoc)) AND (Жур.CLOSED = 1) |group by ЗаявкиРег.ЗаявкаПокупателя, Заказы.ЗаказПоставщику, Поступление.iddoc, Реализация.iddoc |"); Выполняясь, вешает, а затем аварийно завершает работу Предприятия. Сдается мне, это из-за нескольких условий при подключении журнала, нет? Заранее спасибо. |
|||
1
orefkov
07.12.12
✎
01:11
|
версия какая?
|
|||
2
wsxedc83
07.12.12
✎
01:18
|
1sqlite.dll - 1023
|
|||
3
orefkov
07.12.12
✎
01:21
|
1.0.2.6 пробовал?
Или 1.0.2.4 отсюда http://www.1cpp.ru/forum/YaBB.pl?num=1211491690/224#224 |
|||
4
wsxedc83
07.12.12
✎
16:01
|
Её перерегистрировать надо? После просто замены че-то не взлетело - повисло опять всё...
|
|||
5
wsxedc83
07.12.12
✎
16:02
|
(3) Заменил, кстати, на 1.0.2.6 отсюда: http://snegopat.ru/1sqlite/index
|
|||
6
wsxedc83
07.12.12
✎
16:04
|
Попробовал зарегить - не регится.
|
|||
7
wsxedc83
07.12.12
✎
16:09
|
Если это имеет значение: во время зависания предприятия загрузка ЦП процессом предприятия = 0. Скрытых окон при этом нет.
После вырубания процесса(если параллельно открыть отладчик - то через короткое время процесс вырубается сам с критической ошибкой) при повторном запуске переиндексация таблиц долго(по сравнению с обычным временем) стоит на восстановлении индексов таблицы "Журналы" |
|||
8
wsxedc83
07.12.12
✎
16:10
|
Попробовал и версию 1.0.2.4 - по нулям.
|
|||
9
wsxedc83
07.12.12
✎
16:10
|
Куда копать? Может проще запрос переделать?
|
|||
10
Адимр
07.12.12
✎
16:15
|
(9) Может база битая? ТИИ выгрузка/загрузка.
|
|||
11
wsxedc83
07.12.12
✎
16:24
|
То есть, я так понимаю, к sql-части вопросов нет - то есть такой запрос в принципе рабочий??
|
|||
12
wsxedc83
07.12.12
✎
16:54
|
Временно вопрос снимается, т.к. обнаружилось, что база, таки действительно битая. Причем мною же. Временно прошу прощения за сворованное у почтеннейшей публики время.
|
|||
13
wsxedc83
07.12.12
✎
22:01
|
Блин, у всех бы программ такую поддержку - через 18 минут после опубликования вопроса сам главный разработчик компоненты нашел время подключиться к решению вопроса!! Круто! Вот что значит профессиональный подход к делу!
Но теперь о грустном: Ничего не помогло - сделал свежую, не битую копию с рабочей базы - то же самое. С библотекой 1.0.2.6, естественно. |
|||
14
Ёпрст
07.12.12
✎
22:24
|
(13) 1.0.2.6 не использовать - в ней есть ошибки и вылет на прстейших запросах.
1.0.2.4 пользуй. |
|||
15
Ёпрст
07.12.12
✎
22:24
|
хотя она и быстрее
|
|||
16
wsxedc83
07.12.12
✎
22:31
|
1.0.2.4 проверил. То же самое. Получается, нельзя несколько условий при Join on в журнале?
|
|||
17
wsxedc83
07.12.12
✎
22:31
|
Или не в этом трабла?
|
|||
18
Маленький Вопросик
07.12.12
✎
22:38
|
нахрена вообще использовать склайт в 1с?
|
|||
19
Ёпрст
07.12.12
✎
22:42
|
(16) всё можно..
но твой запрос на мой нетрезвый взгляд я бы отправил в топку. (18) не используй |
|||
20
Ёпрст
07.12.12
✎
22:47
|
1. в гроуп бай нужно писать всё тоже самое, что и в селект листе( скульлайт ошибки не выдаст, он тихо мстит медленным выполнением запроса)
2. соединение с журналом.. нафига ? загадка |
|||
21
Ёпрст
07.12.12
✎
22:48
|
ну в соединении лепить строку через || тоже не быстро
|
|||
22
Ёпрст
07.12.12
✎
22:49
|
проще отрезать лишнее, чем добавить вид дока
|
|||
23
Маленький Вопросик
07.12.12
✎
22:49
|
(19) я его использовал эдак в году 2009, потом понял, что лучше xml нет ничего в таких случаях
|
|||
24
Ёпрст
07.12.12
✎
23:03
|
(23) Наркоман штоле ?
Какое отношение xml имеет к прямым запросам с помощью 1sqlite ? |
|||
25
wsxedc83
08.12.12
✎
16:00
|
(20) Соединение с журналом для отбора только проведенных документов.
|
|||
26
wsxedc83
08.12.12
✎
16:57
|
|
|||
27
wsxedc83
08.12.12
✎
16:58
|
(20) Но весить и рушить-то 1С недовыбор полей в групбай не должно же... Нигде ж не валит...
|
|||
28
wsxedc83
08.12.12
✎
23:55
|
Чутка подрихтовал запрос:
//Выполняем запрос ТЗ = запрос.ВыполнитьЗапрос(" |select | (case when ДокЗаявка.ВидОперации = :ВидОперации Then :ВидДокумента.ЗаявкаПокупателя || ЗаявкиРег.ЗаявкаПокупателя else ДокЗаявка.ДокОснование end) [Основание :Документ], | ЗаявкиРег.ЗаявкаПокупателя [Заявка :Документ.ЗаявкаПокупателя], | Заказы.ЗаказПоставщику [Заказ :Документ.ЗаказПоставщику], | Поступление.iddoc [Пост :Документ.ПоступлениеТМЦ], | Реализация.iddoc [Реал :Документ.Реализация] |FROM | | (SELECT | ЗаявкаПокупателя, | sum(КоличествоРасход) Количество | FROM | РегистрИтоги_Заявки WHERE period = :ДатаИтогвНаКонецПрошлогоПериода | GROUP BY ЗаявкаПокупателя | HAVING SUM(КоличествоРасход)<>0) ЗаявкиРег | inner join | Журнал Жур1 on Жур1.iddoc = ЗаявкиРег.ЗаявкаПокупателя AND Жур1.Автор = :Автор | LEFT JOIN Документ_ЗаявкаПокупателя ДокЗаявка on ДокЗаявка.iddoc = ЗаявкиРег.ЗаявкаПокупателя | LEFT JOIN Регистр_ЗаказыЗаявки ЗаказыЗаявки on ЗаказыЗаявки.ЗаявкаПокупателя = ЗаявкиРег.ЗаявкаПокупателя | LEFT JOIN Регистр_Заказы Заказы on Заказы.ЗаказПоставщику = ЗаказыЗаявки.ЗаказПоставщику | LEFT JOIN Документ_ПоступлениеТМЦ Поступление on Поступление.ДокОснование = :ВидДокумента.ЗаказПоставщику || ЗаказыЗаявки.ЗаказПоставщику | LEFT JOIN Документ_Реализация Реализация on Реализация.ДокОснование = :ВидДокумента.ЗаявкаПокупателя || ЗаявкиРег.ЗаявкаПокупателя |inner join | Журнал Жур2 on ((Жур2.iddoc = ЗаявкиРег.ЗаявкаПокупателя) OR (Жур2.iddoc = Поступление.iddoc) OR (Жур2.iddoc = Реализация.iddoc)) AND (Жур2.CLOSED = 1) |group by (case when ДокЗаявка.ВидОперации = :ВидОперации Then :ВидДокумента.ЗаявкаПокупателя || ЗаявкиРег.ЗаявкаПокупателя else ДокЗаявка.ДокОснование end), | ЗаявкиРег.ЗаявкаПокупателя, | Заказы.ЗаказПоставщику, | Поступление.iddoc, | Реализация.iddoc |"); Теперь не рушит. Просто виснет. Причем, очень странно - при зависании запроса окно обработки можно закрыть(!) нажатием esc, но главное окно предприятия при этом не отвисает, строка "Выполняется обработка" не исчезает из строки состояния... Причем, поочередным отключением строк выяснил, что зависание начинается на строке: |inner join | Журнал Жур2 on ((Жур2.iddoc = ЗаявкиРег.ЗаявкаПокупателя) OR (Жур2.iddoc = Поступление.iddoc) OR (Жур2.iddoc = Реализация.iddoc)) AND (Жур2.CLOSED = 1) |
|||
29
hhhh
09.12.12
✎
00:28
|
(0) йо, я на самом деле подумал, что стены цехов рухнули на заводе. Вы поаккуратнее в высказываниях
|
|||
30
Salimbek
09.12.12
✎
03:24
|
(19) Поддерживаю, запрос выкинуть в топку. Особенно из-за OR в условии соединения, т.к. при этом оптимизатор и использование индексов сразу отключаются (имхо) и будет построчное сканирование всей таблицы журналов. Особенно странно это выглядит при том, что Жур2 более нигде в запросе не используется.
Короче, автору рекомендуется описать задачу "словесно", типа, есть такие данные, связаны между собой так-то(типа, при проведении заявки пишем А в регистр заявка и Б в ЗаказыЗаявки), надо получить для вот такой задачи вот такую выборку. Возможно что подскажут более оптимальный запрос, реализующий нужную функциональность. |
|||
31
Ёпрст
10.12.12
✎
09:41
|
(28) вот это нафига ?
| inner join | Журнал Жур1 on Жур1.iddoc = ЗаявкиРег.ЗаявкаПокупателя AND Жур1.Автор = :Автор |
|||
32
Ёпрст
10.12.12
✎
09:41
|
фильтр по автору заявки ?
|
|||
33
Ёпрст
10.12.12
✎
09:44
|
вот это нафига ?
LEFT JOIN Регистр_ЗаказыЗаявки ЗаказыЗаявки on ЗаказыЗаявки.ЗаявкаПокупателя = ЗаявкиРег.ЗаявкаПокупателя |
|||
34
ЧеловекДуши
10.12.12
✎
09:44
|
Все нормально, вешает :)
Ты пытаешься получить слишком много данных. Оптимизируй запрос :) .. ох уж эти лентяи, даже прямой запрос запороть умудрятся :) |
|||
35
orefkov
11.12.12
✎
08:48
|
Сейчас посмотрел на sqlite.org ошибки, исправленные в последнем релизе:
"Fix a bug (ticket [d02e1406a58ea02d]]) that causes a segfault on a LEFT JOIN that includes an OR in the ON clause." Как раз наверное этот случай. На днях уже запланирован выход sqlite 3.7.15, так что надо бы будет обновить компоненту. |
|||
36
Ёпрст
11.12.12
✎
08:58
|
(35) ага.. и ошибки в 26 версии поправишь ?
|
|||
37
wsxedc83
12.12.12
✎
20:08
|
(31) Да. Фильтр по автору заявки.
|
|||
38
wsxedc83
12.12.12
✎
20:09
|
(33) В результате запроса нужны только те заказы, которые закрывали движения по регистру ЗаказыЗаявки только указанной заявки
|
|||
39
wsxedc83
12.12.12
✎
20:10
|
(30) Жур2 нужен исключительно для того, чтобы в результат попадали только проведенные документы.
|
|||
40
wsxedc83
12.12.12
✎
20:11
|
(35) Спасибо! Да, вероятно это мой случай, т.к. база у меня не то чтобы большая. Не должно вешаться, да ещё так странно...
|
|||
41
Злопчинский
12.12.12
✎
20:12
|
(38) берем регистр ЗаказЗаявки, фильтруем его по указанной заявке, из выборки фильтруем записи где заказ непустой
- я правильно понял..? |
|||
42
wsxedc83
12.12.12
✎
21:12
|
Так или иначе, вопрос решился переделкой запроса:
ТЗ = запрос.ВыполнитьЗапрос(" |select | (case when ДокЗаявка.ВидОперации = :ВидОперации Then :ВидДокумента.ЗаявкаПокупателя || ЗаявкиРег.ЗаявкаПокупателя else ДокЗаявка.ДокОснование end) [Основание :Документ], | ЗаявкиРег.ЗаявкаПокупателя [Заявка :Документ.ЗаявкаПокупателя], | Заказы.ЗаказПоставщику [Заказ :Документ.ЗаказПоставщику], | Поступление.iddoc [Пост :Документ.ПоступлениеТМЦ], | Реализация.iddoc [Реал :Документ.Реализация] |FROM | | (SELECT | ЗаявкаПокупателя, | sum(КоличествоРасход) Количество | FROM | РегистрИтоги_Заявки WHERE period = :ДатаИтогвНаКонецПрошлогоПериода | GROUP BY ЗаявкаПокупателя | HAVING SUM(КоличествоРасход)<>0) ЗаявкиРег | inner join | Журнал Жур1 on Жур1.iddoc = ЗаявкиРег.ЗаявкаПокупателя AND Жур1.Автор = :Автор | LEFT JOIN Документ_ЗаявкаПокупателя ДокЗаявка on ДокЗаявка.iddoc = ЗаявкиРег.ЗаявкаПокупателя | LEFT JOIN Регистр_ЗаказыЗаявки ЗаказыЗаявки on ЗаказыЗаявки.ЗаявкаПокупателя = ЗаявкиРег.ЗаявкаПокупателя | LEFT JOIN Регистр_Заказы Заказы on Заказы.ЗаказПоставщику = ЗаказыЗаявки.ЗаказПоставщику | LEFT JOIN | ( SELECT | iddoc, | ДокОснование | FROM | Документ_ПоступлениеТМЦ | WHERE iddoc IN | (Select iddoc from Журнал WHERE iddocdef = :ВидДокумента.ПоступлениеТМЦ AND CLOSED = 1 )) Поступление | ON Поступление.ДокОснование = :ВидДокумента.ЗаказПоставщику || ЗаказыЗаявки.ЗаказПоставщику | LEFT JOIN | ( SELECT | iddoc, | ДокОснование | FROM | Документ_Реализация | WHERE iddoc IN | (Select iddoc from Журнал WHERE iddocdef = :ВидДокумента.Реализация AND ISMARK <> '*' )) Реализация | ON Реализация.ДокОснование = :ВидДокумента.ЗаявкаПокупателя || ЗаявкиРег.ЗаявкаПокупателя |group by (case when ДокЗаявка.ВидОперации = :ВидОперации Then :ВидДокумента.ЗаявкаПокупателя || ЗаявкиРег.ЗаявкаПокупателя else ДокЗаявка.ДокОснование end), | ЗаявкиРег.ЗаявкаПокупателя, | Заказы.ЗаказПоставщику, | Поступление.iddoc, | Реализация.iddoc |"); |
|||
43
Злопчинский
12.12.12
✎
21:14
|
четьо не нравится мне этот запрос
|
|||
44
Партизан
12.12.12
✎
22:34
|
(1) удаление записей через 1sqlite уже поддерживается или нет еще? а то очень надо.
|
|||
45
wsxedc83
13.12.12
✎
00:13
|
(43) Да мне тоже не особо нравится...
|
|||
46
Ёпрст
13.12.12
✎
09:11
|
(44) нет
|
|||
47
Партизан
17.12.12
✎
12:23
|
(46) и не планируется?
|
|||
48
Ёпрст
17.12.12
✎
12:24
|
(47) врят ли будет когда.
|
|||
49
wsxedc83
03.01.13
✎
21:24
|
Извиняюсь, что приходится поднимать, но время выполнения запроса не устраивает категорически:
ТЗ = запрос.ВыполнитьЗапрос(" |select | (case when ДокЗаявка.ВидОперации = :ВидОперации Then :ВидДокумента.ЗаявкаПокупателя || ЗаявкиРег.ЗаявкаПокупателя else ДокЗаявка.ДокОснование end) [Основание :Документ], | ЗаявкиРег.ЗаявкаПокупателя [Заявка :Документ.ЗаявкаПокупателя], | ЗаявкиРег.Количество [КоличествоРег :Число], | ДокСтрокиЗаявка.Количество [КоличествоДок :Число], | Заказы.ЗаказПоставщику [Заказ :Документ.ЗаказПоставщику], | Поступление.iddoc [Пост :Документ.ПоступлениеТМЦ], | Реализация.iddoc [Реал :Документ.Реализация] |FROM | (SELECT | ЗаявкаПокупателя, | sum(КоличествоРасход) Количество | FROM | РегистрИтоги_Заявки WHERE period = :ДатаИтогвНаКонецПрошлогоПериода | GROUP BY ЗаявкаПокупателя | HAVING SUM(КоличествоРасход)<>0) ЗаявкиРег | inner join | Журнал Жур1 on Жур1.iddoc = ЗаявкиРег.ЗаявкаПокупателя AND Жур1.Автор = :Автор | LEFT JOIN Документ_ЗаявкаПокупателя ДокЗаявка on ДокЗаявка.iddoc = ЗаявкиРег.ЗаявкаПокупателя | LEFT JOIN Регистр_ЗаказыЗаявки ЗаказыЗаявки on ЗаказыЗаявки.ЗаявкаПокупателя = ЗаявкиРег.ЗаявкаПокупателя | LEFT JOIN Регистр_Заказы Заказы on Заказы.ЗаказПоставщику = ЗаказыЗаявки.ЗаказПоставщику | LEFT JOIN | (SELECT | iddoc, | sum(Количество) Количество | FROM | ДокументСтроки_ЗаявкаПокупателя | GROUP BY iddoc) ДокСтрокиЗаявка on ДокСтрокиЗаявка.iddoc = ЗаявкиРег.ЗаявкаПокупателя | LEFT JOIN | (SELECT | iddoc, | ДокОснование | FROM | Документ_ПоступлениеТМЦ | WHERE iddoc IN | (Select iddoc from Журнал WHERE iddocdef = :ВидДокумента.ПоступлениеТМЦ AND CLOSED = 1 )) Поступление | ON Поступление.ДокОснование = :ВидДокумента.ЗаказПоставщику || ЗаказыЗаявки.ЗаказПоставщику | LEFT JOIN | (SELECT | iddoc, | ДокОснование | FROM | Документ_Реализация ) Реализация | ON Реализация.ДокОснование = :ВидДокумента.ЗаявкаПокупателя || ЗаявкиРег.ЗаявкаПокупателя |group by | (case when ДокЗаявка.ВидОперации = :ВидОперации Then :ВидДокумента.ЗаявкаПокупателя || ЗаявкиРег.ЗаявкаПокупателя else ДокЗаявка.ДокОснование end), | ЗаявкиРег.ЗаявкаПокупателя, | ЗаявкиРег.Количество, | ДокСтрокиЗаявка.Количество, | Заказы.ЗаказПоставщику, | Поступление.iddoc, | Реализация.iddoc |"); Этот запрос выполняется 21886 мсек. Прикинув, что запрос может выполняться долго из-за нескольких обращений к журналу, я решил вынести обращения к журналу в отдельный запрос с созданием отдельной таблицы и обращением непосредственно к ней, но ничего не выиграл, даже проиграл (время выполнения с допзапросом - 22514 мсек). 1sqlite - 1.0.2.6 (пробовал и на 1.0.2.3 - с тем же успехом). База - небольшая. Самая большая таблица - регистр партий - около 70Мб. За 5 лет работы фирмы - немного. Куда можно покопать? Как можно ускорить работу запроса? В чем и где ошибка? Спасибо! |
|||
50
orefkov
03.01.13
✎
22:11
|
(49)
Посмотрю 5го января, апни только. |
|||
51
wsxedc83
03.01.13
✎
22:16
|
(50) Договорились! Спасибо!
|
|||
52
Chai Nic
03.01.13
✎
22:16
|
(49) А если попробовать вместо "left join" сделать "left hash join" или "left merge join" ?
|
|||
53
wsxedc83
03.01.13
✎
22:25
|
(52) unknown or unsupported join type: LEFT hash
unknown or unsupported join type: LEFT merge |
|||
54
Chai Nic
03.01.13
✎
22:27
|
(53) А если этот же самый запрос переписать под 1с++? Тоже тормозить будет?
|
|||
55
wsxedc83
03.01.13
✎
22:31
|
(54) Я там умру, наверное, в индексы регистров попадать. Если совсем никак sqlite не взлетит - наверное буду в эту сторону думать...
|
|||
56
Chai Nic
03.01.13
✎
22:34
|
Интересно было бы попробовать на mssql-базе, перехватить запрос профайлером и посмотреть план выполнения..
|
|||
57
wsxedc83
03.01.13
✎
22:37
|
План выполнения, насколько я понимаю, можно посмотреть и у sqlite - Александр как-то говорил, что есть консоль... Надо у него на сайте поковырять будет...
|
|||
58
bezgudroman
03.01.13
✎
23:38
|
а у кого-нить сохранился переведеный сайт скулайта? или прийдется английскую версию юзать?
|
|||
59
wsxedc83
04.01.13
✎
13:26
|
(58) А был переведенный вариант? Не знал...
|
|||
60
Dolly_EV
04.01.13
✎
14:53
|
(59) был-был ,тоже ищу
|
|||
61
orefkov
05.01.13
✎
09:31
|
(49)
Для начала сколько занимает выполнение простого |select | ЗаявкиРег.ЗаявкаПокупателя [Заявка :Документ.ЗаявкаПокупателя], | ЗаявкиРег.Количество [КоличествоРег :Число] |FROM | (SELECT | ЗаявкаПокупателя, | sum(КоличествоРасход) Количество | FROM | РегистрИтоги_Заявки WHERE period = :ДатаИтогвНаКонецПрошлогоПериода | GROUP BY ЗаявкаПокупателя | HAVING SUM(КоличествоРасход)<>0) ЗаявкиРег ? |
|||
62
wsxedc83
05.01.13
✎
19:39
|
(61) Первое выполнение было 540 мсек, дальше несколько раз примерно 140 мсек. 3000 строк результата.
|
|||
63
wsxedc83
05.01.13
✎
20:05
|
Вообще, я запрос несколько хм-м... переделал и теперь он у меня выполняется примерно 4 секунды на Windows 7 Ultimate c 4Гб ОЗУ и 1,2 секунды на Windows XP с 1Гб ОЗУ. Процессоры примерно одного поколения. о_О Это как такое возможно? Код такой:
ТЗ = запрос.ВыполнитьЗапрос(" |select | (case when ДокЗаявка.ВидОперации = :ВидОперации Then :ВидДокумента.ЗаявкаПокупателя || ЗаявкиРег.ЗаявкаПокупателя else ДокЗаявка.ДокОснование end) [Основание :Документ], | ЗаявкиРег.ЗаявкаПокупателя [Заявка :Документ.ЗаявкаПокупателя], | ЗаявкиРег.Количество [КоличествоРегЗаявки :Число], | РегРезервы.Количество [КоличествоРегРезервы :Число], | РегРезервыПриходы.Поступление [Пост :Документ.ПоступлениеТМЦ], | Заказы.ЗаказПоставщику [Заказ :Документ.ЗаказПоставщику], | Реализация.iddoc [Реал :Документ.Реализация] |FROM | (SELECT | ЗаявкаПокупателя, | sum(КоличествоРасход) Количество | FROM | РегистрИтоги_Заявки WHERE period = :ДатаИтогвНаКонецПрошлогоПериода AND ЗаявкаПокупателя IN (SELECT iddoc FROM Журнал WHERE Автор = :Автор) | GROUP BY ЗаявкаПокупателя | HAVING SUM(КоличествоРасход)<>0) ЗаявкиРег | LEFT JOIN Документ_ЗаявкаПокупателя ДокЗаявка on ДокЗаявка.iddoc = ЗаявкиРег.ЗаявкаПокупателя | LEFT JOIN | ((SELECT ЗаказПоставщику | FROM Регистр_Заказы) РегЗаказы | INNER JOIN | (SELECT iddoc,ДокОснование | FROM Документ_ЗаказПоставщику) ДокЗаказы ON ДокЗаказы.iddoc = РегЗаказы.ЗаказПоставщику ) Заказы on Заказы.ДокОснование = :ВидДокумента.ЗаявкаПокупателя || ЗаявкиРег.ЗаявкаПокупателя | LEFT JOIN | (SELECT | ЗаявкаПокупателя, | sum(case when debkred=0 Then Количество else 0 end) Количество | FROM | Регистр_РезервыПартий | group by ЗаявкаПокупателя )РегРезервы ON РегРезервы.ЗаявкаПокупателя = ЗаявкиРег.ЗаявкаПокупателя | LEFT JOIN | (SELECT | ЗаявкаПокупателя, | iddoc Поступление | FROM | Регистр_РезервыПартий WHERE debkred=0 AND iddocdef = :ВидДокумента.ПоступлениеТМЦ | group by ЗаявкаПокупателя,iddoc )РегРезервыПриходы ON РегРезервыПриходы.ЗаявкаПокупателя = ЗаявкиРег.ЗаявкаПокупателя | LEFT JOIN | ( SELECT | iddoc, | ДокОснование | FROM | Документ_Реализация | WHERE iddoc IN | (Select iddoc from Журнал WHERE iddocdef = :ВидДокумента.Реализация AND ISMARK <> '*' ) | ) Реализация | ON Реализация.ДокОснование = :ВидДокумента.ЗаявкаПокупателя || ЗаявкиРег.ЗаявкаПокупателя |group by | (case when ДокЗаявка.ВидОперации = :ВидОперации Then :ВидДокумента.ЗаявкаПокупателя || ЗаявкиРег.ЗаявкаПокупателя else ДокЗаявка.ДокОснование end), | ЗаявкиРег.ЗаявкаПокупателя, | ЗаявкиРег.Количество, | РегРезервы.Количество, | Заказы.ЗаказПоставщику, | РегРезервыПриходы.Поступление, | Реализация.iddoc |"); |
|||
64
Ёпрст
09.01.13
✎
09:08
|
(63) всё в топку
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |