![]() |
![]() |
![]() |
|
v7: Индексированная таблица | ☑ | ||
---|---|---|---|---|
0
Asakra
17.10.13
✎
07:53
|
Пишу такой код:
Запрос = СоздатьОбъект("ПрямойЗапрос"); Запрос.Текст = "ВЫБРАТЬ | ВложенныйЗапрос.Номенклатура КАК [Номенклатура :Справочник.Номенклатура], | $СпрНоменклатура.ПолнНаименование КАК [Представление :Строка], | | ВЫБОР | КОГДА :ЕстьАртикул = 1 | ТОГДА $СпрНоменклатура.Артикул | ИНАЧЕ '' | КОНЕЦ КАК [Артикул :Строка], | | $ЕдиницыИзмерений.ТекущийЭлемент КАК [Единица :Справочник.Единицы], | | ВложенныйЗапрос.Количество КАК [Количество :Число.15.3], | ВложенныйЗапрос.Цена КАК [Цена :Число.15.2], | ВложенныйЗапрос.Сумма КАК [Сумма :Число.15.2], | ВложенныйЗапрос.СуммаНДС КАК [СуммаНДС :Число.15.2], | | ВложенныйЗапрос.Сумма + | ВЫБОР | КОГДА :СуммаВклНДС = 0 | ТОГДА ВложенныйЗапрос.СуммаНДС | ИНАЧЕ 0 | КОНЕЦ КАК [Всего :Число.15.2], | | ВЫБОР | КОГДА ЕСТЬNULL(ЕдиницыИзмерений.Коэффициент, 0) = 0 | ТОГДА 0 | ИНАЧЕ ВложенныйЗапрос.Количество/ЕдиницыИзмерений.Коэффициент | КОНЕЦ КАК КолКоробок, | | ВЫБОР | КОГДА ЕСТЬNULL(ЕдиницыИзмерений.Коэффициент, 0) * ЕСТЬNULL(ЕдиницыИзмерений.Вес, 0) = 0 | ТОГДА 0 | ИНАЧЕ ВложенныйЗапрос.Количество/ЕдиницыИзмерений.Коэффициент * ЕдиницыИзмерений.Вес | КОНЕЦ КАК Вес, | | ВложенныйЗапрос.КоличествоЗаявки КАК [КоличествоЗаявки :Число.15.3], | ВложенныйЗапрос.ЦенаЗаявки КАК [ЦенаЗаявки :Число.15.2], | ВложенныйЗапрос.СуммаНДСЗаявки КАК [СуммаНДСЗаявки :Число.15.2], | ВложенныйЗапрос.СуммаЗаявки КАК СуммаЗаявки, | ВложенныйЗапрос.ВсегоПоЗаявке КАК [ВсегоПоЗаявке :Число.15.2], | | ВЫБОР | КОГДА ЕСТЬNULL(ЕдиницыИзмерений.Коэффициент, 0) = 0 | ТОГДА 0 | ИНАЧЕ ВложенныйЗапрос.КоличествоЗаявки/ЕдиницыИзмерений.Коэффициент | КОНЕЦ КАК КолКоробокЗаявки, | | ВЫБОР | КОГДА ЕСТЬNULL(ЕдиницыИзмерений.Коэффициент, 0) * ЕСТЬNULL(ЕдиницыИзмерений.Вес, 0) = 0 | ТОГДА 0 | ИНАЧЕ ВложенныйЗапрос.КоличествоЗаявки/ЕдиницыИзмерений.Коэффициент * ЕдиницыИзмерений.Вес | КОНЕЦ КАК ВесЗаявки, | | ОстаткиТМЦ.КоличествоОстаток КАК [ОстатокТМЦ :Число.15.3], | | ВЫБОР | КОГДА ВЫРАЗИТЬ(ВложенныйЗапрос.Количество КАК NUMERIC(15,3)) = 0 | ТОГДА 1 | КОГДА ВЫРАЗИТЬ(ВложенныйЗапрос.КоличествоЗаявки КАК NUMERIC(15,3)) <> 0 | ТОГДА 1 | ИНАЧЕ 0 | КОНЕЦ КАК Недопоставка | |ИЗ | (ВЫБРАТЬ | ОсновнаяТаблица.Номенклатура КАК Номенклатура, | СУММА(ОсновнаяТаблица.Количество) КАК Количество, | СУММА(ОсновнаяТаблица.Цена) КАК Цена, | СУММА(ОсновнаяТаблица.Сумма) КАК Сумма, | СУММА(ОсновнаяТаблица.СуммаНДС) КАК СуммаНДС, | СУММА(ОсновнаяТаблица.КоличествоЗаявки) КАК КоличествоЗаявки, | СУММА(ОсновнаяТаблица.ЦенаЗаявки) КАК ЦенаЗаявки, | СУММА(ОсновнаяТаблица.СуммаЗаявки) КАК СуммаЗаявки, | СУММА(ОсновнаяТаблица.СуммаНДСЗаявки) КАК СуммаНДСЗаявки, | СУММА(ОсновнаяТаблица.ВсегоПоЗаявке) КАК ВсегоПоЗаявке | | ИЗ | (ВЫБРАТЬ | $ДокСтроки.Номенклатура КАК Номенклатура, | $ДокСтроки.Количество КАК Количество, | $ДокСтроки.Цена КАК Цена, | $ДокСтроки.Сумма КАК Сумма, | $ДокСтроки.СуммаНДС КАК СуммаНДС, | 0 КАК КоличествоЗаявки, | 0 КАК ЦенаЗаявки, | 0 КАК СуммаЗаявки, | 0 КАК СуммаНДСЗаявки, | 0 КАК ВсегоПоЗаявке | | ИЗ | ДокументСтроки.Реализация КАК ДокСтроки | | ГДЕ | $ДокСтроки.ТекущийДокумент = :Документ | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | ОстаткиЗаявки.Номенклатура, | 0, | 0, | 0, | 0, | ОстаткиЗаявки.КоличествоРасходОстаток, | $Заявка.Цена, | $Заявка.Сумма / ЕСТЬNULL($Заявка.Количество, 1) * ОстаткиЗаявки.КоличествоРасходОстаток, | $Заявка.СуммаНДС, | ОстаткиЗаявки.СтоимостьРасходОстаток | | ИЗ | $РегистрОстатки.Заявки(:Документ~, ЗаявкаПокупателя = :Заявка, Номенклатура, (КоличествоРасход,СтоимостьРасход)) КАК ОстаткиЗаявки | | ЛЕВОЕ СОЕДИНЕНИЕ ДокументСтроки.ЗаявкаПокупателя КАК Заявка | ПО $Заявка.Номенклатура = ОстаткиЗаявки.Номенклатура | | ГДЕ | $Заявка.ТекущийДокумент = :Заявка И ОстаткиЗаявки.КоличествоРасходОстаток > 0 | | ) КАК ОсновнаяТаблица | | СГРУППИРОВАТЬ | ОсновнаяТаблица.Номенклатура | | ) КАК ВложенныйЗапрос | | ЛЕВОЕ СОЕДИНЕНИЕ $РегистрОстатки.ОстаткиТМЦ(:Документ~, Склад = :Склад, Номенклатура, Количество) КАК ОстаткиТМЦ | ПО ВложенныйЗапрос.Номенклатура = ОстаткиТМЦ.Номенклатура | | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура | ПО ВложенныйЗапрос.Номенклатура = $СпрНоменклатура.ТекущийЭлемент | | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Единицы КАК ЕдиницыИзмерений | ПО $СпрНоменклатура.ОсновнаяЕдиница = $ЕдиницыИзмерений.ТекущийЭлемент |"; Запрос.УстановитьТекстовыйПараметр("Документ" , Докум); Запрос.УстановитьТекстовыйПараметр("Склад" , Докум.Склад); Запрос.УстановитьТекстовыйПараметр("ЕстьАртикул" , Константа.ПоказыватьАртикул); Запрос.УстановитьТекстовыйПараметр("СуммаВклНДС" , ?((Докум.УчитыватьНДС = 1) И (Докум.СуммаВклНДС = 0), 0, 1)); Запрос.УстановитьТекстовыйПараметр("Заявка" , Заявка); // } Выборка = Запрос.Выполнить(); Выборка.НоваяКолонка("Родитель"); Выборка.ВыбратьСтроки(); Пока Выборка.ПолучитьСтроку() = 1 Цикл ПолныйКод = Выборка.Номенклатура.ПолныйКод(); Поз = Найти(ПолныйКод, "/"); Если Поз > 0 Тогда Выборка.Родитель = Лев(ПолныйКод, Поз - 1); КонецЕсли; КонецЦикла; Выборка.Сортировать("Родитель,Представление"); Выборка.Группировать("Недопоставка: Недопоставка", "Недопоставка"); Выборка.Сортировать("Недопоставка"); После чего "выборка" не содержит колонку тзПотомки. Почему? Пишу Запрос = СоздатьОбъект("ПрямойЗапрос"); Запрос.Текст = "ВЫБРАТЬ * ИЗ Справочник.Номенклатура"; Выборка = Запрос.Выполнить(); Выборка.Группировать("ISFOLDER: ISFOLDER", ); Колонки тзПотомки опять нет Открываю раннее написанный отчет, там "Группировать" работает так как надо. |
|||
1
Aleksey
17.10.13
✎
07:56
|
(1) А что по твоему там должно быть?
|
|||
2
Aleksey
17.10.13
✎
07:58
|
Запрос = СоздатьОбъект("ПрямойЗапрос");
Запрос.Текст = "ВЫБРАТЬ * ИЗ Справочник.Номенклатура"; Выборка = Запрос.Выполнить(); Выборка.Группировать("ISFOLDER: ISFOLDER", ); Колонки тзПотомки опять нет Правильно и не будет Выборка.Группировать("ISFOLDER: ISFOLDER, Код:Код", ); - а так будет |
|||
3
Aleksey
17.10.13
✎
07:59
|
точнее
Выборка.Группировать("ISFOLDER: ISFOLDER, ID:ID", ); |
|||
4
Chai Nic
17.10.13
✎
08:01
|
Группировать удаляет все колонки, кроме группировочных и суммовых.
|
|||
5
Mikeware
17.10.13
✎
08:01
|
(2)(3) не будет :-)
|
|||
6
Aleksey
17.10.13
✎
08:02
|
(4) Это не ТЗ, а индексированная таблица, тут не удаляются колонки
(5) Почему? |
|||
7
Aleksey
17.10.13
✎
08:03
|
Потому что ковычек нет после запятой?
|
|||
8
Aleksey
17.10.13
✎
08:03
|
или потому что запятая, вместо точки с запятой?
|
|||
9
Aleksey
17.10.13
✎
08:03
|
Выборка.Группировать("ISFOLDER: ISFOLDER; ID:ID","");
|
|||
10
ADirks
17.10.13
✎
08:04
|
Потому что документацию читать надо
|
|||
11
Aleksey
17.10.13
✎
08:05
|
(10) О великий гуру потянулся. Стена там ==>.
Нечего по теме написать - не пиши |
|||
12
ADirks
17.10.13
✎
08:07
|
Рекомендация прочесть документацию - это как раз по теме.
|
|||
13
Aleksey
17.10.13
✎
08:09
|
(12) по теме это когда копипаст на текст документации. А рекомендация почитать - это из серии "я нехрена не знаю поэтому пошлю ТС читать документацию, чтобы выглядеть умнее"
|
|||
14
Mikeware
17.10.13
✎
08:09
|
(11) раз знаешь, где стена - или побейся :-)
------ Синтаксис: Группировать(стрГруппировки, стрКолонкиСумм, [чРасшифровкаПоследнегоУровня = 0]) Параметры: стрГруппировки - тип: Строка. Строка, описывающая требуемую структуру группировки. Задаётся в виде <ИмяИндекса1>: <ИндексноеВыражение1> [; <ИмяИндекса2>: <ИндексноеВыражение2> ... ]. ИндексноеВыражение - строка в том же формате, что и для метода ДобавитьИндекс(), с одним дополнением: если в списке модификаторов колонки присутствует символ '&', то по этой колонке будут посчитаны итоги по группам справочника. Колонка с таким модификатором может быть только одна на каждом уровне группировки. стрКолонкиСумм - тип: Строка. Строка с колонками, по которым нужно считать суммы. чРасшифровкаПоследнегоУровня - тип: Число. 1 - в каждой строке последнего уровня группировки будет таблица с расшифровкой, содержащая строки исходной таблицы в нетронутом виде. 0 - последний уровень будет свёрнут. Описание: формирует таблицу с древовидной структурой в соответствии с группировками. На каждом уровне группировки остаются только уникальные значения по соответствующему индексу. В колонки сумм записываются суммы по всем строкам с совпадающим значением ключа. Строки с совпадающими значениями ключа записываются в таблицу, которая помещается в колонку тзПотомки - эта колонка создаётся в процессе группировки. |
|||
15
Mikeware
17.10.13
✎
08:11
|
(13) пора бы уже привыкнуть читать документацию, если советуют...
|
|||
16
ДенисЧ
17.10.13
✎
08:13
|
(13) Кхм.... Возникать в адрес одного из разработчиков инструмента, который ты пытаешься использовать...
Это, минимум, неумно... |
|||
17
Asakra
17.10.13
✎
08:13
|
(2) Спасибо за быстрый ответ. так оно есть. второй индекс кто будет добавлять? :)
|
|||
18
Aleksey
17.10.13
✎
08:13
|
(14) эээ я же поправил в(9)
(16) Они мне не подписаны, а фотки всех разработчиков мне не подвезли |
|||
19
Aleksey
17.10.13
✎
08:16
|
(14) К тому же
"Строки с совпадающими значениями ключа записываются в таблицу, которая помещается в колонку тзПотомки" Т.е. логично предположить что в выюорке Выборка.Группировать("ISFOLDER: ISFOLDER", ); есть повторяющиеся значения ключа, но при этом колонки тзПотомки нет, Т.е. мне вот лично до сих пор непонятно почему нет, поэтому приходится вводить дополнительную группировку |
|||
20
ADirks
17.10.13
✎
08:17
|
Документация - это не беллетристика. Её _внимательно_ читать надо.
|
|||
21
Aleksey
17.10.13
✎
08:20
|
(20) Ну уж простите, что есть в открытом доступе, тем и пользуемся. Это может у вас, у разработчиков, своя документация которая в голове. А вот всякие особенности которые может быть мимоходом и написаны в середине топика на 1000 сообщений в (14) не отражены
|
|||
22
Aleksey
17.10.13
✎
08:22
|
Ладно всем добра, а мне на работу пора.
Автор свою проблему решил, поэтому топик можно закрывать дабы не уйти в дикий оффтопик |
|||
23
Asakra
17.10.13
✎
08:25
|
(19) уже натыкался на эти грабли, да видать всего не упомнишь... чиркнули бы разработчики в доку, что тзПотомки формируется минимум при двух индексах, потому что, потому... подобных глупых тем было б меньше
|
|||
24
Salimbek
17.10.13
✎
08:27
|
(23) Какие нафиг два индекса? что непонятного в этом?: "чРасшифровкаПоследнегоУровня - тип: Число. 1 - в каждой строке последнего уровня группировки будет таблица с расшифровкой, содержащая строки исходной таблицы в нетронутом виде. 0 - последний уровень будет свёрнут."
т.е. если не укажешь явно Выборка.Группировать("ISFOLDER: ISFOLDER", "", 1); то не будет у тебя никакой ТЗПотомки |
|||
25
Salimbek
17.10.13
✎
08:31
|
и почему ищешь Родителя таким странным перебором?
Что мешает в запросе добавить: $СпрНоменклатура.ParentId КАК [Родитель :Справочник.Номенклатура], |
|||
26
Asakra
17.10.13
✎
08:32
|
(24) Да так и есть. Спасибо. Будем учиться правильно читать доку :)
(25) т.к.самый верхний родитель нужен |
|||
27
Salimbek
17.10.13
✎
08:38
|
(26) Ясно, не внимательно посмотрел.
Также не обратил внимания, что это "ПрямойЗапрос", а там не ".ParentId", а просто ".Родитель", так что пост (25) совсем мимо кассы. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |