|
Динамический список. Как ускорить работу | ☑ | ||
---|---|---|---|---|
0
Тролль главный
12.09.13
✎
11:42
|
В управляемой форме списка документа "Заказ покупателя" (на основе УТ 10.3, обычное приложение) сделан динамический список:
ВЫБРАТЬ ДокументЗаказПокупателя.Дата, ДокументЗаказПокупателя.Номер, ДокументЗаказПокупателя.Статус, ДокументЗаказПокупателя.Контрагент, ДокументЗаказПокупателя.Организация, ДокументЗаказПокупателя.СуммаДокумента, ДокументЗаказПокупателя.СкладГруппа, ДокументЗаказПокупателя.ДатаОтгрузки, ДокументЗаказПокупателя.СпособДоставки, ДокументЗаказПокупателя.Ответственный, ПОДСТРОКА(ДокументЗаказПокупателя.Комментарий, 1, 200) КАК Комментарий, ДокументЗаказПокупателя.Филиал, ДокументЗаказПокупателя.ДоговорКонтрагента, ЕСТЬNULL(СУММА(ВЫБОР КОГДА ЕСТЬNULL(ЗаказыПокупателейОстатки.КоличествоОстаток, 0) = 0 ТОГДА 0 ИНАЧЕ ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) * ЗаказыПокупателейОстатки.СуммаВзаиморасчетовОстаток / ЗаказыПокупателейОстатки.КоличествоОстаток КОНЕЦ), 0) КАК СуммаРезерва, ЕСТЬNULL(СУММА(ЗаказыПокупателейОстатки.КОтгрузкеОстаток), 0) КАК КОтгрузке, ЕСТЬNULL(СУММА(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток), 0) КАК Резерв, ЕСТЬNULL(СУММА(ЗаказыПокупателейОстатки.КоличествоОстаток), 0) КАК Отгрузить, ЕСТЬNULL(СУММА(ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) / ВЫБОР КОГДА ЕСТЬNULL(ЗаказыПокупателейОстатки.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) = 0 ТОГДА 1 ИНАЧЕ ЗаказыПокупателейОстатки.Номенклатура.ЕдиницаДляОтчетов.Коэффициент КОНЕЦ), 0) КАК Упак, ЕСТЬNULL(СУММА(ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) / ВЫБОР КОГДА ЕСТЬNULL(ЗаказыПокупателейОстатки.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) = 0 ТОГДА 1 ИНАЧЕ ЗаказыПокупателейОстатки.Номенклатура.ЕдиницаДляОтчетов.Коэффициент КОНЕЦ * ЕСТЬNULL(ЗаказыПокупателейОстатки.Номенклатура.ЕдиницаДляОтчетов.Объем, 0)), 0) КАК Объем ИЗ Документ.ЗаказПокупателя КАК ДокументЗаказПокупателя ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПокупателей.Остатки КАК ЗаказыПокупателейОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки КАК ТоварыВРезервеНаСкладахОстатки ПО ЗаказыПокупателейОстатки.ЗаказПокупателя = ТоварыВРезервеНаСкладахОстатки.ДокументРезерва И ЗаказыПокупателейОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура ПО ДокументЗаказПокупателя.Ссылка = ЗаказыПокупателейОстатки.ЗаказПокупателя СГРУППИРОВАТЬ ПО ДокументЗаказПокупателя.Ссылка, ДокументЗаказПокупателя.Дата, ДокументЗаказПокупателя.Номер, ДокументЗаказПокупателя.Статус, ДокументЗаказПокупателя.Контрагент, ДокументЗаказПокупателя.Организация, ДокументЗаказПокупателя.СуммаДокумента, ДокументЗаказПокупателя.СкладГруппа, ДокументЗаказПокупателя.ДатаОтгрузки, ДокументЗаказПокупателя.СпособДоставки, ДокументЗаказПокупателя.Ответственный, ПОДСТРОКА(ДокументЗаказПокупателя.Комментарий, 1, 200), ДокументЗаказПокупателя.Филиал, ДокументЗаказПокупателя.ДоговорКонтрагента Тормозит жутко. Как ускорить процесс? или с такой структурой данных это клиника? |
|||
1
Maxus43
12.09.13
✎
11:48
|
ЕСТЬNULL(СУММА(ЗаказыПокупателейОстатки.КОтгрузкеОстаток), 0) КАК КОтгрузке,
а почему не: СУММА(ЕСТЬNULL(ЗаказыПокупателейОстатки.КОтгрузкеОстаток, 0)) КАК КОтгрузке, |
|||
2
Тролль главный
12.09.13
✎
11:49
|
(1) потому что если строк не будет в ЗаказыПокупателейОстатки у тебя будет NULL, а у меня 0, но это не важно в общем то тут
|
|||
3
Euguln
12.09.13
✎
11:49
|
(0) Соединяй с ВТ
|
|||
4
Тролль главный
12.09.13
✎
11:49
|
+(2) хотя нет, но все равно думаю это не критично
|
|||
5
Тролль главный
12.09.13
✎
11:50
|
(3) что соединять с ВТ? и что в твоем понимание ВТ?
|
|||
6
MadHead
12.09.13
✎
11:54
|
ВТ вроде как в запросе динамического списка использовать нельзя.
Нет возможности наложить условие в виртуальной таблице остаток по складу и резерву? |
|||
7
Maxus43
12.09.13
✎
11:55
|
(4) ну тут то точно не нужен естьnull прервый.
ЕСТЬNULL(СУММА(ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) / ВЫБОР КОГДА ЕСТЬNULL(ЗаказыПокупателейОстатки.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) = 0 ТОГДА 1 ИНАЧЕ ЗаказыПокупателейОстатки.Номенклатура.ЕдиницаДляОтчетов.Коэффициент КОНЕЦ), 0) КАК Упак, Я это просто к тому что перегружен лишними и вставлены не туда. На производительности не уверен как скажется, но надо же в порядок сначала привести |
|||
8
Bober
12.09.13
✎
11:58
|
||||
9
Тролль главный
12.09.13
✎
12:00
|
(7) согласен, я тут на несколько экспериментирую пока ))
|
|||
10
Euguln
12.09.13
✎
12:01
|
(5) Временная таблица
(6) Чой-то? А.Быков (с) |
|||
11
MadHead
12.09.13
✎
12:15
|
(10) Было такое ограничение платформы о сейчас с упр формами почти не работаю, может был какие-то изменения в новых версиях платформы по этому поводу
|
|||
12
Maxus43
12.09.13
✎
12:46
|
(11) Ограничения: в запросах нельзя использовать объединения.
(с) СП больше ничего |
|||
13
z0001
12.09.13
✎
12:54
|
(0)индексы
|
|||
14
Тролль главный
12.09.13
✎
13:16
|
вот со временной таблицей (кстати пакеты недоступны в конструкторе, но делать их можно):
ВЫБРАТЬ ДокументЗаказПокупателя.Ссылка КАК Ссылка, ДокументЗаказПокупателя.Дата, ДокументЗаказПокупателя.Номер, ДокументЗаказПокупателя.Статус, ДокументЗаказПокупателя.Контрагент КАК Контрагент, ДокументЗаказПокупателя.Организация КАК Организация, ДокументЗаказПокупателя.СуммаДокумента, ДокументЗаказПокупателя.СкладГруппа КАК СкладГруппа, ДокументЗаказПокупателя.ДатаОтгрузки, ДокументЗаказПокупателя.СпособДоставки, ДокументЗаказПокупателя.Ответственный КАК Ответственный, ПОДСТРОКА(ДокументЗаказПокупателя.Комментарий, 1, 200) КАК Комментарий, ДокументЗаказПокупателя.Филиал КАК Филиал, ДокументЗаказПокупателя.ДоговорКонтрагента КАК ДоговорКонтрагента ПОМЕСТИТЬ ВыбранныеДокументы ИЗ Документ.ЗаказПокупателя КАК ДокументЗаказПокупателя ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВыбранныеДокументы.Ссылка КАК Ссылка, ВыбранныеДокументы.Дата, ВыбранныеДокументы.Номер, ВыбранныеДокументы.Статус, ВыбранныеДокументы.Контрагент КАК Контрагент, ВыбранныеДокументы.Организация КАК Организация, ВыбранныеДокументы.СуммаДокумента, ВыбранныеДокументы.СкладГруппа КАК СкладГруппа, ВыбранныеДокументы.ДатаОтгрузки, ВыбранныеДокументы.СпособДоставки, ВыбранныеДокументы.Ответственный КАК Ответственный, ВыбранныеДокументы.Комментарий КАК Комментарий, ВыбранныеДокументы.Филиал КАК Филиал, ВыбранныеДокументы.ДоговорКонтрагента КАК ДоговорКонтрагента, СУММА(ВЫБОР КОГДА ЕСТЬNULL(ЗаказыПокупателейОстатки.КоличествоОстаток, 0) = 0 ТОГДА 0 ИНАЧЕ ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) * ЗаказыПокупателейОстатки.СуммаВзаиморасчетовОстаток / ЗаказыПокупателейОстатки.КоличествоОстаток КОНЕЦ) КАК СуммаРезерва, СУММА(ЕСТЬNULL(ЗаказыПокупателейОстатки.КОтгрузкеОстаток, 0)) КАК КОтгрузке, СУММА(ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0)) КАК Резерв, СУММА(ЕСТЬNULL(ЗаказыПокупателейОстатки.КоличествоОстаток, 0)) КАК Отгрузить, СУММА(ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) / ВЫБОР КОГДА ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) = 0 ТОГДА 1 ИНАЧЕ ТоварыВРезервеНаСкладахОстатки.Номенклатура.ЕдиницаДляОтчетов.Коэффициент КОНЕЦ) КАК Упак, СУММА(ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) / ВЫБОР КОГДА ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) = 0 ТОГДА 1 ИНАЧЕ ТоварыВРезервеНаСкладахОстатки.Номенклатура.ЕдиницаДляОтчетов.Коэффициент КОНЕЦ * ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.Номенклатура.ЕдиницаДляОтчетов.Объем, 0)) КАК Объем ИЗ ВыбранныеДокументы КАК ВыбранныеДокументы ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПокупателей.Остатки( , ЗаказПокупателя В (ВЫБРАТЬ Т.Ссылка ИЗ ВыбранныеДокументы КАК Т)) КАК ЗаказыПокупателейОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки( , ДокументРезерва В (ВЫБРАТЬ Т.Ссылка ИЗ ВыбранныеДокументы КАК Т)) КАК ТоварыВРезервеНаСкладахОстатки ПО ЗаказыПокупателейОстатки.ЗаказПокупателя = ТоварыВРезервеНаСкладахОстатки.ДокументРезерва И ЗаказыПокупателейОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура ПО ВыбранныеДокументы.Ссылка = ЗаказыПокупателейОстатки.ЗаказПокупателя СГРУППИРОВАТЬ ПО ВыбранныеДокументы.Ссылка, ВыбранныеДокументы.Дата, ВыбранныеДокументы.Номер, ВыбранныеДокументы.Статус, ВыбранныеДокументы.Контрагент, ВыбранныеДокументы.Организация, ВыбранныеДокументы.СуммаДокумента, ВыбранныеДокументы.СкладГруппа, ВыбранныеДокументы.ДатаОтгрузки, ВыбранныеДокументы.СпособДоставки, ВыбранныеДокументы.Ответственный, ВыбранныеДокументы.Комментарий, ВыбранныеДокументы.Филиал, ВыбранныеДокументы.ДоговорКонтрагента имеем ошибку: Ошибка при выполнении запроса. Ошибка при выполнении запроса. по причине: Поле не найдено "Date" |
|||
15
z0001
12.09.13
✎
13:24
|
без вот этого "СГРУППИРОВАТЬ ПО" попробуй обойтись через вложенные запросы
|
|||
16
H A D G E H O G s
12.09.13
✎
13:26
|
(14) 1С ждет от первого запроса, в котором ты обозначил таблицу, результатов труда, а именно - основных полей:
ref, date, number, deleted, version и.т.д. И не дождется. Идите, просите на партнерском, может смилостивятся. |
|||
17
Euguln
12.09.13
✎
13:30
|
(14) А слабо регистры в ВТ загнать?
|
|||
18
Тролль главный
12.09.13
✎
13:30
|
(17) зачем?
|
|||
19
z0001
12.09.13
✎
13:34
|
(16)поподробнее пожалуйста янхнп
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |