|
Добавить в запрос еще один отбор | ☑ | ||
---|---|---|---|---|
0
Мисти
03.03.14
✎
20:08
|
Запрос и отбор будут в тексте.
|
|||
127
Мисти
09.03.14
✎
22:47
|
Ну, я так и написала.
Вообще, конечно, ерунда у меня какая-то в запросе получается - по каждой группе номенклатуры по 3 строки, по каждой номенклатуре - по 2. |
|||
128
Torquader
09.03.14
✎
22:48
|
(125) Чтобы иерархия была красивой, нужно группы из запроса исключить - иначе на группу будет две строки, что выглядит не айс.
|
|||
129
Мисти
09.03.14
✎
22:49
|
У меня мэйл-агент не установлен. во всяком случае, я им не пользуюсь.
|
|||
130
Torquader
09.03.14
✎
22:50
|
(127) Две вижу, а вот три - это кто-то явно перестарался.
Везде, где выбирается номенклатура вставь "И НЕ Номенклатура.ЭтоГруппа" |
|||
131
m-serg74
09.03.14
✎
22:56
|
(127) итоги потому что еще в прошлой теме я же писал в топку нада
|
|||
132
Мисти
09.03.14
✎
23:00
|
Значит, моя идея, что сначала всё отобрать по справочнику была неправильной.
Давайте всё сначала! |
|||
133
Мисти
09.03.14
✎
23:00
|
ВЫБРАТЬ
| СвободныеОстаткиОстатки.Номенклатура, | СвободныеОстаткиОстатки.Склад, | СвободныеОстаткиОстатки.ВНаличииОстаток, | СвободныеОстаткиОстатки.ВРезервеОстаток, | NULL КАК КОтгрузкеОстаток |ИЗ | РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ТоварыНаСкладахОстатки.Номенклатура, | ТоварыНаСкладахОстатки.Склад, | ТоварыНаСкладахОстатки.ВНаличииОстаток, | NULL, | ТоварыНаСкладахОстатки.КОтгрузкеОстаток |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки |
|||
134
NcSteel
09.03.14
✎
23:02
|
Угадываю автора по теме.... Сразу понял кто автор, так как тема глупа ... ))) Это просто Света из Свет.
|
|||
135
Мисти
09.03.14
✎
23:04
|
Тогда только здесь, потом-то только отсюда вся номенклатура берется, разве нет?
"ВЫБРАТЬ | СПрНом.Ссылка КАК Номенклатура |ПОМЕСТИТЬ ВТ_СписокНом |ИЗ | Справочник.Номенклатура КАК СПрНом |ГДЕ | (&НоменклатураНеЗаполнена | ИЛИ СПрНом.Ссылка В ИЕРАРХИИ (&ВыбТМЦ)) | И (НЕ &ВидНоменВыбран | ИЛИ СПрНом.ВидНоменклатуры = &ВыбВидНомен И НЕ Номенклатура.ЭтоГруппа) |;"; |
|||
136
Мисти
09.03.14
✎
23:05
|
Где я теперь получу ВНаличииОстаток, если он мне нужен из регистра ТоварыНаСкладахОстатки?
|
|||
137
NcSteel
09.03.14
✎
23:08
|
Никогда! Запомните НИКОГДА не используйте в условиях ИЛИ.... по крайней мере два раза..... это рукалицо
|
|||
138
Мисти
09.03.14
✎
23:10
|
(137) Почему??
|
|||
139
m-serg74
09.03.14
✎
23:14
|
(138) просто прими на веру... НИКОГДА ... ДВА РАЗА... иначе это просто напрасно
|
|||
140
Мисти
09.03.14
✎
23:16
|
Не, ну мне так совсем непонятно. Должен же быть ответ!
|
|||
141
Мисти
09.03.14
✎
23:16
|
В книжке моей про это ничего нет.
|
|||
142
m-serg74
09.03.14
✎
23:17
|
ты сама пишешь книжку?
|
|||
143
Torquader
09.03.14
✎
23:17
|
ТекстЗапроса="ВЫБРАТЬ
|СпрНом.Ссылка КАК Номенклатура |ПОМЕСТИТЬ ВТ_СписокНом |ИЗ |Справочник.Номенклатура КАК СпрНом"; Если(НоменклатураЗаполнена)ИЛИ(ВыбранВидНоменклатуры)Тогда ТекстЗапроса=ТекстЗапроса+" |ГДЕ"; Если НоменклатураЗаполнена Тогда ТекстЗапроса=ТекстЗапроса+" |СпрНом.Ссылка В ИЕРАРХИИ (&ВыбТмц)"; Зпр.УстановитьПараметр("ВыбТмц",СписокНоменклатуры); КонецЕсли; Если ВыбранВидНоменклатуры Тогда ТекстЗапроса=ТекстЗапроса+" |СпрНом.ВидНоменклатуры=&ЗаданныйВид"; Зпр.УстановитьПараметр("ЗаданныйВид",ВидНоменклатуры); КонецЕсли; КонецЕсли; |
|||
144
NcSteel
09.03.14
✎
23:19
|
(140)
Использование логического ИЛИ в секции ГДЕ запроса Не следует использовать ИЛИ в секции ГДЕ запроса. Это может привести к тому, что СУБД не сможет использовать индексы таблиц и будет выполнять сканирование, что увеличит время работы запроса и вероянтность возникновения блокировок. Вместо этого следует разбить один запрос на несколько и объединить результаты. Например, запрос ВЫБРАТЬ Товар.Наименование ИЗ Справочник.Товары КАК Товар ГДЕ Артикул = "001" ИЛИ Артикул = "002" следует заменить на запрос ВЫБРАТЬ Товар.Наименование ИЗ Справочник.Товары КАК Товар ГДЕ Артикул = "001" |ОБЪЕДИНИТЬ ВСЕ |ВЫБРАТЬ Товар.Наименование ИЗ Справочник.Товары КАК Товар ГДЕ Артикул = "002" |
|||
145
Torquader
09.03.14
✎
23:20
|
Конечно, так как мы это условие используем в нескольких местах, то лучше его "сложить" в отдельную переменную, которую потом просто вставлять в запрос, где нужно.
|
|||
146
Мисти
09.03.14
✎
23:20
|
Ну, я раньше ьак всегда делала!
Хочу от этого отучиться, потому что быстрее же работает, если условия внутри регистра, например, задавать, а не потом - "где". |
|||
147
Torquader
09.03.14
✎
23:21
|
(144) У неё там ИЛИ используется для того, чтобы выключать условие, которое она собирает до исполнения запроса. То есть, если всё написать стандартно - или просто не будет.
|
|||
148
Мисти
09.03.14
✎
23:21
|
(144) Ух ты! Спасибо! Выучу.
|
|||
149
NcSteel
09.03.14
✎
23:21
|
(146) Надо знать структуру таблиц и понимать, почему быстрее , а почему нет .... И далеко не всегда использовать параметры виртуальных таблиц работает быстрее
|
|||
150
Мисти
09.03.14
✎
23:24
|
А когда нет? Вот, например, условие по складу для регистра свободных остатков?
|
|||
151
m-serg74
09.03.14
✎
23:24
|
(148) я еще в прошлой теме написал - посмотри сообщения про "все должно руководствоваться головой" в каждом случае надо думать
|
|||
152
m-serg74
09.03.14
✎
23:25
|
(150) как минимум вместе [условие по складу] это сделать параметром виртуальной таблицы
|
|||
153
Мисти
09.03.14
✎
23:26
|
(143) Мы же решили начать с регистров!
|
|||
154
Torquader
09.03.14
✎
23:26
|
(150) А что там в условии ?
Если склад не задан, то просто его не указываем, если склад задан только один, то проверка на равно, если их несколько, тогда в списке. И количество складов известно на момент формирования текста запроса, поэтому, на момент исполнения запроса известно, что там будет. |
|||
155
Torquader
09.03.14
✎
23:27
|
(153) Я тебе показываю, что условие можно добавить в любое место запроса без всяких танцев с ИЛИ.
|
|||
156
Мисти
09.03.14
✎
23:27
|
Ну да, либо склад выбран, либо по всем - его быстрее в условии регистра или "Где"?
|
|||
157
m-serg74
09.03.14
✎
23:27
|
(152) вместе ... вместо
|
|||
158
Мисти
09.03.14
✎
23:28
|
(157) Так понятнее.
|
|||
159
Мисти
09.03.14
✎
23:28
|
У меня в запросе получается половина строк с единицей и артикулом, а половина - без. Ну, т.е. одна какая-то лишняя явно.
|
|||
160
Torquader
09.03.14
✎
23:29
|
(156) Так что мешает дописать его в текст запроса после ГДЕ по условию, а не городить что-то другое.
|
|||
161
m-serg74
09.03.14
✎
23:29
|
(159) соединение такое соединение
|
|||
162
Мисти
09.03.14
✎
23:29
|
Короче, кто мне наконец, уже более-менее всё это перепишет?
А я потом прикручу к этому цены - САМА! |
|||
163
Torquader
09.03.14
✎
23:29
|
(159) Обход результата запроса с группировками нужно смотреть - вы там группировали по ИЕРАРХИИ (итоги строили), а потом обходите всё линейно.
|
|||
164
m-serg74
09.03.14
✎
23:30
|
(162) - (124)
|
|||
165
Мисти
09.03.14
✎
23:30
|
Я обхожу по группировкам.
|
|||
166
Torquader
09.03.14
✎
23:36
|
Пусть у нас СписокНоменклатуры - наш список номенклатуры, в котором она должна быть.
ВидНоменклатуры - наш вид номенклатуры, который пользователь может выбрать. Тогда сначала формируем условие. УсловиеЗапроса=""; Если СписокНоменклатуры.Количество()>0 Тогда УсловиеЗапроса=УсловиеЗапроса+" |СпрНом.Ссылка В ИЕРАРХИИ(&ПарамСписокНоменклатуры)"; Зпр.УстановитьПараметр("ПарамСписокНоменклатуры",СписокНоменклатуры); КонецЕсли; Если ЗначениеЗаполнено(ВидНоменклатуры)Тогда УсловиеЗапроса=УсловиеЗапроса+" |СпрНом.ВидНоменклатуры=ПарамВидНоменклатуры"; Зпр.УстановитьПараметр("ПарамВидНоменклатуры",ВидНоменклатуры); КонецЕсли; Далее, это можно вставить в запрос. |
|||
167
Torquader
09.03.14
✎
23:39
|
ТекстЗапроса="
|ВЫБРАТЬ | СвободныеОстаткиОстатки.Номенклатура, | СвободныеОстаткиОстатки.Склад, | СвободныеОстаткиОстатки.ВНаличииОстаток, | СвободныеОстаткиОстатки.ВРезервеОстаток, | NULL КАК КОтгрузкеОстаток |ИЗ | РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки"; Если УсловиеЗапроса<>"" Тогда ТекстЗапроса=ТекстЗапроса+" |ГДЕ |"+УсловиеЗапроса; КонецЕсли; ТекстЗапроса=ТекстЗапроса+" | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ТоварыНаСкладахОстатки.Номенклатура, | ТоварыНаСкладахОстатки.Склад, | ТоварыНаСкладахОстатки.ВНаличииОстаток, | NULL, | ТоварыНаСкладахОстатки.КОтгрузкеОстаток |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки"; Если УсловиеЗапроса<>"" Тогда ТекстЗапроса=ТекстЗапроса+" |ГДЕ |"+УсловиеЗапроса; КонецЕсли; в общем, где-то так. |
|||
168
Torquader
09.03.14
✎
23:42
|
С условием, кстати, я фигню написал - там ИЛИ нужно вставлять.
То есть так: УсловиеЗапроса=""; Если СписокНоменклатуры.Количество()>0 Тогда УсловиеЗапроса="СпрНом.Ссылка В ИЕРАРХИИ(&ПарамСписокНоменклатуры)"; Зпр.УстановитьПараметр("ПарамСписокНоменклатуры",СписокНоменклатуры); КонецЕсли; Если ЗначениеЗаполнено(ВидНоменклатуры)Тогда Если УсловиеЗапроса<>"" Тогда УсловиеЗапроса="("+УсловиеЗапроса+")И(СпрНом.ВидНоменклатуры=ПарамВидНоменклатуры)"; Иначе УсловиеЗапроса="СпрНом.ВидНоменклатуры=ПарамВидНоменклатуры"; КонецЕсли; Зпр.УстановитьПараметр("ПарамВидНоменклатуры",ВидНоменклатуры); КонецЕсли; |
|||
169
Torquader
09.03.14
✎
23:47
|
Ой, и ещё Null заменить на 0, так как Null в запросе просто никому не нужен.
Ну и сгруппировать нужно результат по выбранным полям с суммой, особенно, если склад не указан - иначе будет куча строк для одной и той же номенклатуры. |
|||
170
Torquader
09.03.14
✎
23:49
|
В общем, если немного посидеть, то можно и дописать.
|
|||
171
Мисти
10.03.14
✎
12:49
|
Надо максимум ограничений прямо в регистре указать, а не "где", за это меня уже пороли!
Или это мало влияет на скорость? |
|||
172
Мисти
10.03.14
✎
12:51
|
И чем плохо - сначала отобрать список номенклатуры (как я собиралась), а потом по нему рассчитывать остатки? (там еще и цены потом)
Или вот так - (как сначала было) "ВЫБРАТЬ | ЕСТЬNULL(СвободныеОстаткиОстатки.Склад, ТоварыНаСкладахОстатки.Склад) КАК Склад, | ЕСТЬNULL(СвободныеОстаткиОстатки.Номенклатура, ТоварыНаСкладахОстатки.Номенклатура) КАК Номенклатура, | ЕСТЬNULL(СвободныеОстаткиОстатки.Номенклатура.ВидНоменклатуры, ТоварыНаСкладахОстатки.Номенклатура.ВидНоменклатуры) КАК ВидНоменклатуры, | ЕСТЬNULL(СвободныеОстаткиОстатки.ВРезервеОстаток, 0) КАК ВРезерве, | ЕСТЬNULL(СвободныеОстаткиОстатки.ВНаличииОстаток, 0) КАК ВНаличии, | ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0) КАК ПолныйОстаток, | СвободныеОстаткиОстатки.Номенклатура.ВидНоменклатуры КАК ВидНомен |ПОМЕСТИТЬ ВТ_СвободныеОстатки |ИЗ | РегистрНакопления.СвободныеОстатки.Остатки( | &НаДату, | ВЫБОР | КОГДА &СкладВыбран | ТОГДА Склад = &ВыбСклад | ИНАЧЕ ИСТИНА | КОНЕЦ | И ВЫБОР | КОГДА &ВыбТМЦВыбран | ТОГДА Номенклатура В ИЕРАРХИИ (&ВыбТМЦ) | ИНАЧЕ ИСТИНА | КОНЕЦ | И ВЫБОР | КОГДА &ВидНоменВыбран | ТОГДА Номенклатура.ВидНоменклатуры = &ВыбВидНомен | ИНАЧЕ ИСТИНА | КОНЕЦ {(Номенклатура)}) КАК СвободныеОстаткиОстатки |
|||
173
Мисти
10.03.14
✎
12:52
|
Про полное соединение - это мне тут кто-то написал в прошлый раз.
Я так и не поняла, чем его заменить (как это будет выглядеть) |
|||
174
Torquader
10.03.14
✎
14:16
|
(173) Полное соединение иногда интересно, но не в данном случае. Вы выбираете остатки из одного регистра и резервы - из другого, поэтому, логичнее отбирать сначала один, а потом другой (то есть объединение), а соединение в данном случае выглядит не очень понятно.
Кстати, можно посмотреть в любой типовой как делается любая выборка из нескольких регистров. Кроме того, если у вас будут цены, то нужно предполагать, что на складе будут одинаковые товары с разными ценами (если, конечно, не розничная торговля). Сначала отобрать список номенклатуры можно только тогда, когда есть доп-условия (по дополнительным свойствам) - так как соединение с основным запросом выглядит не очень красиво. Если же условия на значения номенклатуры, то можно делать соединения сразу в отборе по регистру (однако, это всё равно будет обращение к таблице Номенклатура). Хотя, если вы хотите получить все товары, которые удовлетворяют отбору вне зависимости от остатков, то вполне допустимо сначала просто их отобрать, так как всё равно от выборки по всем товарам не уйти, но в этом случае, количество товаров не должно быть большим. Самое главное, что при выборе регистров всё равно будет делаться соединение с этой виртуальной таблицей товаров, и, если в ней товаров не сильно меньше, чем в самой таблице товаров, то вы потеряете время на формирование временной таблицы. Можно не делать соединение с таблицей регистра и выбрать сначала остатки всех товаров, но, если большую часть этой выборки мы потом отбросим, то не за чем напрягать сервер. |
|||
175
Мисти
10.03.14
✎
16:04
|
Цена нужна только какая-то одна. Если нет цены - то и не надо, пусть будут только остатки.
Тогда надо писать 4 разных запроса - с ценой один (у меня не получилось объединить), по всей номенклатуре - другой, по номенклатуре с отбором - третий, а с отбором по доп. реквизитам - четвертый. |
|||
176
Torquader
10.03.14
✎
16:33
|
(175) Наконец-то, кто-то понял, что одним запросом несколько зайцев убить не получится.
|
|||
177
Мисти
10.03.14
✎
17:14
|
Да у меня и так их 2! Это как раз мой метод.
|
|||
178
Мисти
10.03.14
✎
17:14
|
Так что делать, если для всего справочника номенклатуры?
|
|||
179
Мисти
10.03.14
✎
17:19
|
Мне еще с иерархией надо разобраться!
И можно ли обойтись без итогов, если я потом делаю обход по группировкам? |
|||
180
Torquader
10.03.14
✎
17:20
|
(178) Если для всего справочника, то "левое соединение" с двумя регистрами и выбор значений.
Номенклатура ЛевоеСоединение Рег1 По Ном.Ссылка=Рег1.Ном ЛевоеСоединение Рег2 По Ном.Ссылка=Рег2.Ном |
|||
181
Torquader
10.03.14
✎
17:21
|
(179) Если хочется итоги по группам, то без итогов не обойтись - иначе группы будут, а итоги - нет.
|
|||
182
Мисти
10.03.14
✎
17:40
|
Пока надо решить основную проблему.
У меня написано в конце - |УПОРЯДОЧИТЬ ПО | Артикул |ИТОГИ | СУММА(ВРезерве), | СУММА(ВНаличии), | СУММА(ПолныйОстаток) |ПО | Склад, | Номенклатура ИЕРАРХИЯ |АВТОУПОРЯДОЧИВАНИЕ"; // В итоге у меня всё упорядочивается по артикулу, товары попадают в свою группу, но группы идут не в том порядке, в котором в справочнике! И что там у меня еще было ужасно? Спр.Группа убрала, задваивания строк нет! Это я не сообразила - первая строка идет по складу, вторая - по номенклатуре. |
|||
183
Torquader
10.03.14
✎
18:04
|
Зачем нужно упорядочивание по артикулу ?
Или это заказчики хотели ? Просто, в случае иерархии по номенклатуре это будет выглядеть очень странно. |
|||
184
Мисти
10.03.14
✎
18:19
|
Да, они хотят, чтоб порядок групп - как в справочнике, а в группе - по артикулу.
Сейчас проверю - если убрать по артикулу и оставить автоупорядочивание (а это что?) - может, так и получится? |
|||
185
Мисти
10.03.14
✎
18:34
|
Не-а, группы встали на место, а внутри группы - не по артикулу.
|
|||
186
Мисти
10.03.14
✎
18:37
|
По умолчанию, если открыть справочник номенклатуры - там тоже не по артикулу.
Я могу предложить только такой дурацкий способ - по группам выгружать в таблицу там сортировать, и выводить. |
|||
187
Torquader
10.03.14
✎
19:02
|
Смотри - когда ты включаешь упорядочивание по артикулу - все товары в запросе выбираются по артикулу, а группы достраиваются после попадания товара в отчёт, то есть до появления товара группа никак не может попасть в запрос.
|
|||
188
GANR
10.03.14
✎
19:03
|
(0) Неужели не проще сделать за 2-3 недели то, что я рекомендовал, а не плодить в течение нескольких месяцев вопросы про один и тот же запрос??? Обучающий курс, про который я говорил, проходят даже люди, которым за 60 http://sql-ex.ru/users_page.php?uid=10332 - и ничего.
|
|||
189
Мисти
10.03.14
✎
19:06
|
Давай курс! Я уже почти созрела.
|
|||
190
Мисти
10.03.14
✎
19:07
|
(187) Это странно звучит, как будто речь о переборе.
Оно же всё одновременно появляется в запросе! Если нет нормального пути - сделаю через таблицу. |
|||
191
Torquader
10.03.14
✎
19:09
|
(190) Автоупорядочивание - в твоём случае, упорядочивание по наименованию справочника, но вы ему сказали по артикулу.
Можно попробовать добавить в запрос родителя номенклатуры, упорядочить сначала по нему (то есть по его имени), а потом уже по артикулу (будет для тех, у кого родитель совпал). |
|||
192
Мисти
10.03.14
✎
19:16
|
Мне нравятся твои советы! У меня возникает вопрос - "почему я сама до этого не додумалась?", а не - "что этоо??"
|
|||
193
Мисти
10.03.14
✎
19:17
|
А зачем тогда нужна галка "автоупорядочивание", если и без нее всё так же упорядочивается?
|
|||
194
Torquader
10.03.14
✎
19:21
|
В системе результат запроса упорядочивается по внутреннему ID, который не очень понятен, если же сказано "автоупорядочивание", то это говорит машине, что пользователь хочет видеть упорядоченный результат так, как он показывается в списке.
Однако, автоупорядочивание работает уже после команды "упорядочить по", и в вашем случае "упорядочить ПО артикул" перекрывает автоупорядочивание, которое проявится только тогда, когда совпадут артикулы. |
|||
195
Torquader
10.03.14
✎
19:23
|
(192) Если кто-то не хочет думать, это значит, что он на что-то отвлекается.
А вообще, можно почитать любую инструкцию по настоящему SQL, чтобы понять, как он работает - в 1С пытались сделать тоже самое, но на русском языке. P.S. я видел женщину твоего возраста, которая на ура с Oracle работала, так что ничего невозможного нет. |
|||
196
Мисти
10.03.14
✎
19:29
|
Да дело не в возрасте.
Ума у меня, и правда, маловато. Точнее, нет объемного воображения, чтоб с таблицами работать. |
|||
197
Мисти
10.03.14
✎
19:33
|
Очень интересно! Группы построились правильно, а номенклатура - в обратном порядке.
|
|||
198
Мисти
10.03.14
✎
19:49
|
Усё. Получилось.
|
|||
199
rphosts
10.03.14
✎
20:12
|
не прошло и 2 недель...
|
|||
200
Мисти
10.03.14
✎
20:26
|
Бред какой-то! На меленькой группе (внутри еще один уровень подгрупп) - всё красиво, а на большой (внутри - 2 уровня подгрупп) - всё наоборот - подгруппы в неизвестно каком порядке и иерархия в обратную сторону.
|
|||
201
Torquader
10.03.14
✎
20:32
|
(200) Сортировка по родителям была в каком порядке ?
И по чему они упорядочены при выводе в списке ? |
|||
202
Мисти
10.03.14
✎
20:36
|
Я не стала править то, что как бы и работает пока. Хоть бы добиться вида нужного.
ТекстЗапроса = "ВЫБРАТЬ | СПрНом.Ссылка КАК Номенклатура |ПОМЕСТИТЬ ВТ_СписокНом |ИЗ | Справочник.Номенклатура КАК СПрНом |ГДЕ | (&НоменклатураНеЗаполнена | ИЛИ СПрНом.Ссылка В ИЕРАРХИИ (&ВыбТМЦ)) | И (НЕ &ВидНоменВыбран | ИЛИ СПрНом.ВидНоменклатуры = &ВыбВидНомен )И НЕ СПрНом.ЭтоГруппа |;"; Если Не ВыбПрограмма.Пустая() Тогда ТекстЗапроса = ТекстЗапроса+ " ///////////////////////////////////// | ВЫБРАТЬ | НоменклатураДополнительныеРеквизиты.Ссылка Как Номенклатура |ПОМЕСТИТЬ ВТ_СписокНом2 |ИЗ | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты |ГДЕ | НоменклатураДополнительныеРеквизиты.Ссылка В (ВЫБРАТЬ ВТ_СписокНом.Номенклатура ИЗ ВТ_СписокНом) | И НоменклатураДополнительныеРеквизиты.Значение = &ВыбПрограмма |;"; Иначе ТекстЗапроса = ТекстЗапроса+ " ///////////////////////////////////// | ВЫБРАТЬ | НоменклатураДополнительныеРеквизиты.Ссылка Как Номенклатура |ПОМЕСТИТЬ ВТ_СписокНом2 |ИЗ | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты |ГДЕ | НоменклатураДополнительныеРеквизиты.Ссылка В (ВЫБРАТЬ ВТ_СписокНом.Номенклатура ИЗ ВТ_СписокНом) | И НоменклатураДополнительныеРеквизиты.Значение = &ВыбПрограмма |;"; КонецЕсли; ТекстЗапроса = ТекстЗапроса+ "ВЫБРАТЬ | ЕСТЬNULL(СвободныеОстаткиОстатки.Склад, ТоварыНаСкладахОстатки.Склад) КАК Склад, | ЕСТЬNULL(СвободныеОстаткиОстатки.Номенклатура, ТоварыНаСкладахОстатки.Номенклатура) КАК Номенклатура, | ЕСТЬNULL(СвободныеОстаткиОстатки.ВРезервеОстаток, 0) КАК ВРезерве, | ЕСТЬNULL(СвободныеОстаткиОстатки.ВНаличииОстаток, 0) КАК ВНаличии, | ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0) КАК ПолныйОстаток |ПОМЕСТИТЬ ВТ_СвободныеОстатки |ИЗ | РегистрНакопления.СвободныеОстатки.Остатки( | &НаДату, | ВЫБОР | КОГДА &СкладВыбран | ТОГДА Склад = &ВыбСклад | ИНАЧЕ ИСТИНА | КОНЕЦ | И ВЫБОР | КОГДА НЕ &ВыбПрограммаВыбран | ТОГДА Номенклатура В | (ВЫБРАТЬ | ВТ_СписокНом.Номенклатура | ИЗ | ВТ_СписокНом) | ИНАЧЕ Номенклатура В | (ВЫБРАТЬ | ВТ_СписокНом2.Номенклатура | ИЗ | ВТ_СписокНом2) | КОНЕЦ {(Номенклатура)}) КАК СвободныеОстаткиОстатки | ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( | &НаДату, | ВЫБОР | КОГДА &СкладВыбран | ТОГДА Склад = &ВыбСклад | ИНАЧЕ ИСТИНА | КОНЕЦ | И ВЫБОР | КОГДА &ВыбПрограммаВЫбран | ТОГДА Номенклатура В | (ВЫБРАТЬ | ВТ_СписокНом2.Номенклатура | ИЗ | ВТ_СписокНом2) | ИНАЧЕ Номенклатура В | (ВЫБРАТЬ | ВТ_СписокНом.Номенклатура | ИЗ | ВТ_СписокНом) | КОНЕЦ {(Номенклатура)}) КАК ТоварыНаСкладахОстатки | ПО СвободныеОстаткиОстатки.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура | И СвободныеОстаткиОстатки.Склад = ТоварыНаСкладахОстатки.Склад |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СПрНом.Ссылка КАК Номенклатура, | ЕСТЬNULL(СвободныеОстатки.Склад, ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)) КАК Склад, | ЕСТЬNULL(СвободныеОстатки.ВРезерве, 0) КАК ВРезерве, | ЕСТЬNULL(СвободныеОстатки.ВНаличии, 0) КАК ВНаличии, | ЕСТЬNULL(СвободныеОстатки.ПолныйОстаток, 0) КАК ПолныйОстаток, | ПРЕДСТАВЛЕНИЕ(СвободныеОстатки.Номенклатура.ЕдиницаИзмерения) КАК ТовЕд, | СвободныеОстатки.Номенклатура.Артикул КАК Артикул, | СвободныеОстатки.Номенклатура.ЭтоГруппа, | СПрНом.Код, | СПрНом.Родитель КАК Родитель |ИЗ | Справочник.Номенклатура КАК СПрНом | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СвободныеОстатки КАК СвободныеОстатки | ПО СПрНом.Ссылка = СвободныеОстатки.Номенклатура |ГДЕ | (НЕ &ВыбПрограммаВЫбран | И СПрНом.Ссылка В | (ВЫБРАТЬ | ВТ_СписокНом.Номенклатура | ИЗ | ВТ_СписокНом) | ИЛИ &ВыбПрограммаВЫбран | И СПрНом.Ссылка В | (ВЫБРАТЬ | ВТ_СписокНом2.Номенклатура | ИЗ | ВТ_СписокНом2)) | |УПОРЯДОЧИТЬ ПО | Родитель, | Артикул |ИТОГИ | СУММА(ВРезерве), | СУММА(ВНаличии), | СУММА(ПолныйОстаток) |ПО | Склад, | Номенклатура ИЕРАРХИЯ"; |
|||
203
Мисти
10.03.14
✎
20:37
|
Смотрю в отладчике результат запроса - там так и есть, первая группа упорядочена по артикулу по возрастанию, а остальные - по убыванию.
Терроризм какой-то. |
|||
204
GANR
10.03.14
✎
21:04
|
(189) А чего его давать? Регистрируемся на ресурсе из (188), решаем 63 упражнения (1-й сертификат) на рейтинговом этапе и такие вопросы отпадают.
|
|||
205
Torquader
10.03.14
✎
21:12
|
(202) А почему Артикул выбирается из СвободныхОстатков - что там будет, когда остатков нет - Null и что с этим делать ?
|
|||
206
Мисти
10.03.14
✎
21:25
|
(205) чушь какая. Это кто так написал???
|
|||
207
Torquader
10.03.14
✎
21:29
|
(206) И ЭтоГруппа оттуда же.
Кто написал, по-мойму, это очевидно - и ему должно быть стыдно и обидно. |
|||
208
Мисти
10.03.14
✎
22:54
|
Теперь по артикулу всё идет правильно, а группы - еще в запросе стоят не в том порядке, не по алфавиту.
Хотя уже написала - сортировать по наименованию родителя. | СПрНом.Код, | СПрНом.ЭтоГруппа, | СПрНом.Артикул КАК Артикул, | СПрНом.Родитель.Наименование КАК РодительНаименование |ИЗ | Справочник.Номенклатура КАК СПрНом | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СвободныеОстатки КАК СвободныеОстатки | ПО СПрНом.Ссылка = СвободныеОстатки.Номенклатура |ГДЕ | ((НЕ &ВыбПрограммаВЫбран | И СПрНом.Ссылка В | (ВЫБРАТЬ | ВТ_СписокНом.Номенклатура | ИЗ | ВТ_СписокНом) | ИЛИ &ВыбПрограммаВЫбран | И СПрНом.Ссылка В | (ВЫБРАТЬ | ВТ_СписокНом2.Номенклатура | ИЗ | ВТ_СписокНом2))и не Спрном.ЭтоГруппа) | |УПОРЯДОЧИТЬ ПО | РодительНаименование, | Артикул |ИТОГИ | СУММА(ВРезерве), | СУММА(ВНаличии), | СУММА(ПолныйОстаток) |ПО | Склад, | Номенклатура ИЕРАРХИЯ"; // Возврат(ТекстЗапроса); |
|||
209
Мисти
10.03.14
✎
22:58
|
(204) Так это не совсем чтоб 1С!
И вообще, я привыкла на русском писать. Мне бы такой же - но прямо чтоб 1С. |
|||
210
Torquader
10.03.14
✎
23:34
|
СпрНом.ЭтоГруппа при выборе вам зачем ?
Собственно, как и код. Если и так не получилось, то выбирай номенклатуру в отдельную таблицу, как в иерархии, а потом из этой таблицы выбирай только элементы. |
|||
211
Мисти
10.03.14
✎
23:54
|
Так элементы нормально! У меня группы набекрень.
|
|||
212
Мисти
10.03.14
✎
23:55
|
Код = чтоб в таблице посмотреть в отладчике.
А он мешает? |
|||
213
vicof
11.03.14
✎
00:29
|
(210) удивляюсь вашему хладнокровию и педагогическим способностям.
|
|||
214
Torquader
11.03.14
✎
01:27
|
(213) Вы никогда не пробовали приучать котёнка к сортиру - вот там терпения нужно на целый день, так как эти животные не могут продумывать своих действий.
А в данном случае - человек - и даже что-то пытается сделать. И, вполне вероятно, что даже сделает. (211) Попробуй сначала выбрать справочник с группами (во временную таблицу), а потом группы убрать. (И это можно делать на тестовом запросе без соединения с регистром - чтобы быстрее выполнялось). |
|||
215
Мисти
11.03.14
✎
01:36
|
(214) Спасибо за помощь, но я не поняла, как это.
А кошки, кстати, сами понимают про сортир всё, во всяком случае, котята - точно. Вот щенки совсем не сразу. |
|||
216
vicof
11.03.14
✎
02:41
|
(214) я кошку за один день приучил, просто отнес в туалет и все) сама все поняла. Но человека заставить сделать самому-просто отнести,положить,показать,разжевать мало. Пока у Мисти не появится внутренняя мотивация-так и будет сидеть и тупить. Человеке животное ленивое.
|
|||
217
Torquader
11.03.14
✎
09:01
|
В общем, в умной книжке написано, что для получения правильной иерархии нужно выбирать с группами, а в упорядочивании писать СпрНом.Ссылка ИЕРАРХИЯ.
Соответственно, группы можно будет потом "выкинуть" при получении результата запроса. |
|||
218
Мисти
11.03.14
✎
09:14
|
Ого! Говорит - "Нельзя использовать иерархическую сортировку в запросе с итогами.
|
|||
219
Wobland
11.03.14
✎
09:17
|
не хочу читать двести постов. вижу желание группировки в (208), сформулированное странным образом
|
|||
220
Мисти
11.03.14
✎
10:36
|
А что там странного?
Там же соединение с остатками! |ИЗ | Справочник.Номенклатура КАК СПрНом | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СвободныеОстатки КАК СвободныеОстатки |
|||
221
Torquader
11.03.14
✎
10:44
|
(219) Она хочет "интересную" группировку и итоги по группам - что тут такого странного (разве что желание внутри группы отсортировать по артикулу).
|
|||
222
Wobland
11.03.14
✎
10:48
|
(221) она знает, что ЭТОГИ дадут ей дерево?
|
|||
223
Мисти
11.03.14
✎
10:49
|
Да, потом обход по группировкам - по складу и по номенклатуре.
|
|||
224
Torquader
11.03.14
✎
12:15
|
(222) Они ей уже дали дерево, только ветки на этом дереве в другую сторону смотрят.
|
|||
225
Torquader
11.03.14
✎
12:16
|
На самом деле - задача не совсем тривиальная - получить дерево, как оно выглядит в справочнике да ещё и с итогами по ветвям.
|
|||
226
GANR
11.03.14
✎
16:17
|
(209) Не важно какой язык - суть в том, чтобы развить пространственное воображение, нужное при написании запросов.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |