|
v7: 77 - сортировка в запросе по ПолнНаименование | ☑ | ||
---|---|---|---|---|
0
Looking
27.07.15
✎
20:23
|
Доброго времени суток!
Задача в том, чтобы в ТиСовском Прайс-листе изменить сортировку с наименований на сортировку по полным наименованиям. Заменяю в тексте запроса строки |Группировка Номенклатура Упорядочить по Номенклатура.Наименование; |Группировка Номенклатура без групп;"; |Группировка Номенклатура без групп; на |Группировка Номенклатура упорядочить по Номенклатура.ПолнНаименование; |Группировка Номенклатура упорядочить по Номенклатура.ПолнНаименование без групп;"; |Группировка Номенклатура упорядочить по Номенклатура.ПолнНаименование без групп; Получаю какую-то тарабарскую группировку, не в алфавитном порядке. В чем моя ошибка? Прошу подсказать. |
|||
1
GreyK
27.07.15
✎
20:31
|
(0) Реквизит Номенклатура.ПолнНаименование видимо нограниченной длины.
|
|||
2
Looking
27.07.15
✎
22:44
|
(1)да, так и есть, по неограниченным длинам сортировка не производится?
|
|||
3
romix
27.07.15
✎
23:12
|
(2) Не умеет по неограниченным. Но его копию можно ограничить и по ней сортировать, до какого-то предела.
Если поставить этой копии большую длину, то таблицу индекса раздует (там надо посмотреть, чтобы сразу не создало мега-гига индекс). |
|||
4
romix
27.07.15
✎
23:12
|
По Наименованиям еще можно (лучше всего) сортировать.
|
|||
5
Looking
27.07.15
✎
23:23
|
(1), (3) спасибо огромное! тогда или неограниченную длину уберу, или буду предварительно выгружать в ТЗ и уже там сортировать.
|
|||
6
Looking
27.07.15
✎
23:23
|
(4)да вот как раз наименования одни, а для печати другие и нужно именно по тем, что для печати.
|
|||
7
Looking
27.07.15
✎
23:24
|
(1), (3) не знал про такой недостаток неограниченных как невозможность сортировки по ним, спасибо огромное!
|
|||
8
Looking
27.07.15
✎
23:25
|
а почему у некоторых ограниченных максимальная длина 100? это ограничение платформы? почему нельзя сделать не 100, а например 300?
|
|||
9
Garykom
гуру
27.07.15
✎
23:28
|
если список в прайсе не сильно большой, то можно выгружать в ТЗ и сортировать его
еще можно допреквизит "номер в сортировке" в "Номенклатура" и заюзать его предварительно заполненный циферками по порядку "как нуна" |
|||
10
Garykom
гуру
27.07.15
✎
23:29
|
(9)+ но если часто и помногу добавляется новой номенклатуры то нужен будет алгоритма для быстрой "перенумерации сортировки"
|
|||
11
Looking
28.07.15
✎
18:43
|
(3), (9) если я реквизит ПолнНаименование сделаю вместо Неограниченной длины, строкой длиной 300 - 400 знаков. Это чем-то хуже для базы данных? может информация в файлах будет храниться менее оптимально или еще что-то? или это сугубо аспект удобства работы для пользователей, и если пользователям 400 знаков за глаза, то можно смело ограничивать?
|
|||
12
Злопчинский
28.07.15
✎
18:57
|
(11) ну.. если ты на это ограничееное наименование в 400 знаков поставишь сортировку и отбор в пофигураторе.. то лучше этого не делать.. ;-)
|
|||
13
Looking
28.07.15
✎
19:41
|
+(12)не, упорядочивание в отборе работает и без включенных сортировки и отбора в конфигураторе. если обрежу до 400 знаков и не буду включать в конфигураторе для этого реквизита сортировку и отбор - сильно хуже для БД, чем как было (реквизит неограниченной длины).
|
|||
14
Looking
28.07.15
✎
19:42
|
+(13)знак ? забыл в конце.
|
|||
15
Злопчинский
28.07.15
✎
19:45
|
(13) не, не сильно. вообще пофиг в таком случае. просто место будет сжираться неиспользуемое (?) но я думаю это некритично
|
|||
16
Looking
28.07.15
✎
19:50
|
(15)спасибо большое! попробую, если вдруг какая негативная побочка вылезет - отпишусь.
|
|||
17
vcv
29.07.15
✎
06:07
|
(13) "если обрежу до 400"
Индекс будет большой и неэффективный. Лучше завести новый реквизит длиной знаков 20-40-80 символов. ПриЗаписи в карточке номенклатуры его заполнять из ПолнНаименование. По нему и сортировать в запросе. |
|||
18
dk
29.07.15
✎
07:58
|
(0) а зачем дублирование в группировке?
|
|||
19
Looking
29.07.15
✎
08:01
|
(17)спасибо за идею! правда скорее всего имеет смысл от определенного количества элементов в справочнике? позже смогу написать сколько их у меня.
|
|||
20
Looking
29.07.15
✎
08:03
|
(18)в смысле почему 3 раза? это типовой код, там условия по типу или виду номенклатуры (товар, услуга и т.д.)
|
|||
21
1Сергей
29.07.15
✎
08:04
|
(20) это не из типовой. Зачем в запросе три одинаковые группировки?
|
|||
22
Looking
29.07.15
✎
08:37
|
(21)почему не типовой-то, просто не хотел тему захламлять простынями кода, там условие при включении отбора по остаткам, а потом еще услуги с работами добавляются
// текст запроса по выбранным ценам ТекстЗапроса = "//{{ЗАПРОС(ОтборЦен) |Период с ДатаОтчета по ДатаОтчета; |Номенклатура = Справочник.Цены.Владелец; |Тип = Справочник.Цены.ТипЦен; |Цена = Справочник.Цены.Цена; |Единица = Справочник.Цены.Единица; |Валюта = Справочник.Цены.Валюта; |Функция ЦенаСумма = Сумма(Цена); //МДВ //|Группировка Номенклатура Упорядочить по Номенклатура.Наименование; |Группировка Номенклатура упорядочить по Номенклатура.ПолнНаименование; //МДВ |Группировка Тип; |"//}}ЗАПРОС ; Если ПоНаличию = 1 Тогда ТекстЗапросаОстатков = " |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура; |Количество = Регистр.ОстаткиТМЦ.Количество; | |Функция КоличествоКонОст = КонОст(Количество); | //МДВ |Группировка Номенклатура без групп;"; //|Группировка Номенклатура упорядочить по Номенклатура.ПолнНаименование без групп;"; //МДВ Если ВидРазделителя = 2 Тогда Если ПустоеЗначение(ВыбРазделитель1) = 0 Тогда // нужен фильтр по фирме ТекстЗапросаОстатков = "Фирма = Регистр.ОстаткиТМЦ.Фирма;" + ТекстЗапросаОстатков + "Условие(Фирма = ВыбРазделитель1);"; КонецЕсли; ИначеЕсли ВидРазделителя = 3 Тогда Если ПустоеЗначение(ВыбРазделитель2) = 0 Тогда // нужен фильтр по ЮрЛицу фирмы ТекстЗапросаОстатков = "ЮрЛицо = Регистр.ОстаткиТМЦ.Фирма.ЮрЛицо;" + ТекстЗапросаОстатков + "Условие(ЮрЛицо = ВыбРазделитель2);"; КонецЕсли; ИначеЕсли ВидРазделителя = 4 Тогда Если ПустоеЗначение(ВыбРазделитель3) = 0 Тогда // нужен фильтр по УпрАналитике фирмы ТекстЗапросаОстатков = "УпрАналитика = Регистр.ОстаткиТМЦ.Фирма.УпрАналитика;" + ТекстЗапросаОстатков + "Условие(УпрАналитика = ВыбРазделитель3);"; КонецЕсли; КонецЕсли; Если ПустоеЗначение(Склад) = 0 Тогда // нужен фильтр по складу ТекстЗапросаОстатков = "Скл = Регистр.ОстаткиТМЦ.Склад;" + ТекстЗапросаОстатков + "Условие(Скл = Склад);"; КонецЕсли; ЗапросПоОстаткам = СоздатьОбъект("Запрос"); Если ЗапросПоОстаткам.Выполнить(ТекстЗапросаОстатков) = 0 Тогда Возврат; КонецЕсли; СписокНоменклатуры = СоздатьОбъект("СписокЗначений"); Пока ЗапросПоОстаткам.Группировка(1) = 1 Цикл Если ЗапросПоОстаткам.КоличествоКонОст > 0 Тогда СписокНоменклатуры.ДобавитьЗначение(ЗапросПоОстаткам.Номенклатура); КонецЕсли; КонецЦикла; // Добавим услуги и работы в список номенклатуры ВидыУслуг = СоздатьОбъект("СписокЗначений"); ВидыУслуг.ДобавитьЗначение(Перечисление.ВидыНоменклатуры.Услуга); ВидыУслуг.ДобавитьЗначение(Перечисление.ВидыНоменклатуры.Работа); ТекстЗапросаУслуг = " |Номенклатура = Справочник.Цены.Владелец; //МДВ |Группировка Номенклатура без групп; //|Группировка Номенклатура упорядочить по Номенклатура.ПолнНаименование без групп; //МДВ |Условие (Номенклатура.ВидНоменклатуры в ВидыУслуг);"; ЗапросПоУслугам = СоздатьОбъект("Запрос"); Если ЗапросПоУслугам.Выполнить(ТекстЗапросаУслуг) = 0 Тогда Возврат; КонецЕсли; Пока ЗапросПоУслугам.Группировка(1) = 1 Цикл СписокНоменклатуры.ДобавитьЗначение(ЗапросПоУслугам.Номенклатура); КонецЦикла; Если СписокНоменклатуры.РазмерСписка() = 0 Тогда Предупреждение("Заданным условиям фильтра не удовлетворяет ни одна позиция номенклатуры.",60); Возврат; КонецЕсли; ТекстЗапроса = ТекстЗапроса + "Условие(Номенклатура в СписокНоменклатуры);" КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |