Имя: Пароль:
1C
1С v8
СКД Сортировка по строке как по числу
, ,
0 Teresa
 
01.08.14
09:58
Конфигурация БП 2.0.60.4

Отчет на СКД, есть поле в запросе Код подразделения (из справочника Подразделения) с типом Строка.
Скажите, пожалуйста, какие есть варианты организовать сортировку по этой колонке как по числу (чтоб 1,2,3, а не 1,100,101...)?

Создавать в общем модуле экспортную функцию умею, но не хочу менять конфигурацию. ПолучитьНомерНаПечать не подойдет (это же не документ).
Какие варианты еще есть? С виду элементарная задача.
Спасибо.
1 DrZombi
 
гуру
01.08.14
10:00
(0) Преобразуй строку в число и сортируй по доп. полю :)
2 1Сергей
 
01.08.14
10:00
в запросе невозможно преобразование строки в число и наоборот
3 DrZombi
 
гуру
01.08.14
10:01
(0) А вообще-то  у 1С Код тип Строка всегда с нулями впереди не просто так заводится ;)
... как ведете учет, такую сортировку и получаете ... )
4 DrZombi
 
гуру
01.08.14
10:01
(2) Зачем в запросе?
5 DrZombi
 
гуру
01.08.14
10:01
+(4) У него же СКД, вот пускай и сортирует после :)
6 Teresa
 
01.08.14
10:02
(3) в типовой конфе БП Код подразделения строка, конфигурацию ради такого меня я точно не буду.
7 1Сергей
 
01.08.14
10:02
(4) (5) верно
8 Teresa
 
01.08.14
10:02
(5) внешние функции можно использовать в СКД но только если они описаны в общих модулях
9 1Сергей
 
01.08.14
10:02
(6) а сколько там подразделений?
10 DrZombi
 
гуру
01.08.14
10:03
(8) И в чем проблема?
11 Teresa
 
01.08.14
10:03
(7) как предложите сортировать "после" без использования внешних функций? Собственно об этом и сабж.
12 DrZombi
 
гуру
01.08.14
10:03
+(8) Создай свой модуль, он будет там жить Пожизненно, при очередном обновлении не затрется :)
13 1Сергей
 
01.08.14
10:03
(10) конфу он менять не хочет
14 Teresa
 
01.08.14
10:04
(10) см. (0) я не хочу менять конфигурацию ради такой ерунды как сортировка в отчете.
15 1Сергей
 
01.08.14
10:05
(11) я бы нумерацию правильную сделал и не парился
16 DmitriyDI
 
01.08.14
10:05
(0) а сделать вычисляемое поля с твоей строкой и поставить ей тип число и по этому полю отсортировать ?
17 Teresa
 
01.08.14
10:05
(15) в смысле - правильную нумерацию?
18 1Сергей
 
01.08.14
10:06
(17)

00001
00002
...
00365
19 1Сергей
 
01.08.14
10:07
или пробелы вместо лидирующих нулей
20 Teresa
 
01.08.14
10:11
(19) я хотела бы, не меняя ничего в данных, применить сортировку, как по числу.
21 Teresa
 
01.08.14
10:11
(16) не работает такой способ
22 YFedor
 
01.08.14
10:12
(20) Никак, смирись с этим
23 1Сергей
 
01.08.14
10:13
(21) не преобразует или не сортирует?

ЗЫ ненавижу скд
24 Teresa
 
01.08.14
10:15
(23) не сортирует
25 Teresa
 
01.08.14
10:16
(22) не хочу смиряться) ну вдруг как-то можно.
26 Teresa
 
01.08.14
10:19
(18) что касается этого варианта - допустим у меня появятся новые подразделения, это мне заново весь справочник перенумеровывать тогда придется. Мне бы этого не хотелось делать, да и пользователям это будет неудобно.
27 Teresa
 
01.08.14
10:22
В общем, ясно, СКД подложила свинью в очередной раз. Спасибо всем. Придется объяснять заказчику, что невозможно это сделать в СКД.
28 ДенисЧ
 
01.08.14
10:23
(27) Придётся !врать! заказчику. Так будет правильней
29 Teresa
 
01.08.14
10:24
(28) Есть конечно один вариант для извращенцев. Выгрузить результат запроса в ТЗ, Добавить колонку с типом число, заполнить, загрузить обратно как внешний источник данных в СКД. Но это по-моему чересчур.
30 KAO111
 
01.08.14
10:26
Можно сделать вычисляемое поле и по нему сортировать

Подстрока("0000000000",1,10-ДлинаСтроки(Код))+Код
31 DmitriyDI
 
01.08.14
10:30
(24) странно
32 Teresa
 
01.08.14
10:37
(30) Так ведь если код Строка, и длина кода будет одинаковой "1     ", "100   ", добавление лидирующих нулей делу не поможет.
33 Teresa
 
01.08.14
10:38
(31) Вы сами пробовали то, что предлагаете? работает?
34 KuAl
 
01.08.14
10:40
(29)
вполне себе вариант, обойдешься без изменения конфы.
Правда придется все поля описывать.
На самом деле норм - и времени много не займет сделать, хоть и некрасиво и не оптимально.
35 Teresa
 
01.08.14
10:42
(34) ну да, вот именно что и смущает - не очень изящно. Но другого варианта не придумала пока.
36 Gucci76
 
01.08.14
10:45
Можно извратиться и в СКД попробовать привести к числу
Если найду выложу код "извращения" ))))
37 Teresa
 
01.08.14
10:46
(36) было бы интересно взглянуть) Большое спасибо)
38 Gucci76
 
01.08.14
10:47
Делал где-то для автонумерации с постфиксом кадровых документов. Вот бы вспомнить теперь.

Но тут ведь переделка СКД - это приемлемые изменения конфигурации?
39 Teresa
 
01.08.14
10:51
(38) Конечно, СКД можно ломать с любой степенью извращенности)
40 1Сергей
 
01.08.14
11:00
преобразование числа к строке и обратно:


ВЫБРАТЬ
    0 КАК Цифра,
    "0" КАК ЦифраСтр
ПОМЕСТИТЬ Цифры

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    1,
    "1"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    2,
    "2"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    3,
    "3"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    5,
    "5"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    6,
    "6"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    7,
    "7"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    8,
    "8"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    9,
    "9"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Единицы.Цифра + Десятки.Цифра * 10 + Сотни.Цифра * 100 КАК Число,
    ВЫБОР
        КОГДА Сотни.Цифра > 0
            ТОГДА Сотни.ЦифраСтр + Десятки.ЦифраСтр + Единицы.ЦифраСтр
        КОГДА Десятки.Цифра > 0
            ТОГДА Десятки.ЦифраСтр + Единицы.ЦифраСтр
        ИНАЧЕ Единицы.ЦифраСтр
    КОНЕЦ КАК ЧислоСтр
ИЗ
    Цифры КАК Единицы,
    Цифры КАК Десятки,
    Цифры КАК Сотни

УПОРЯДОЧИТЬ ПО
    Число


Только до 999. надо больше - допишешь
41 Simod
 
01.08.14
11:01
42 1Сергей
 
01.08.14
11:02
(40) + блин, четверку пропустил
43 DmitriyDI
 
01.08.14
11:02
(33)

(35) да в СКД не работает, но вот в запросе как можно сделать (проверил, работает)

ВЫБРАТЬ
    ВложенныйЗапрос.Ссылка,
    ВложенныйЗапрос.Код
ПОМЕСТИТЬ Дано
ИЗ
    (ВЫБРАТЬ
        Оборудование.Ссылка КАК Ссылка,
        Оборудование.Код КАК Код
    ИЗ
        Справочник.Оборудование КАК Оборудование) КАК ВложенныйЗапрос
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    0 КАК С,
    1 КАК П
ПОМЕСТИТЬ Р16

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    1,
    10

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    2,
    100

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    3,
    1000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    4,
    10000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    5,
    100000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    6,
    1000000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    7,
    10000000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    8,
    100000000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    9,
    1000000000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    10,
    10000000000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    11,
    100000000000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    12,
    1000000000000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    13,
    10000000000000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    14,
    100000000000000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    15,
    1000000000000000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    16,
    10000000000000000
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    СУММА(А.П * Б.С) / МИНИМУМ(А.П) КАК Ответ,
    Дано.Ссылка
ИЗ
    Дано КАК Дано,
    Р16 КАК А,
    Р16 КАК Б
ГДЕ
    Б.С < 10
    И ПОДСТРОКА(Дано.Код, 17 - А.С, 1) = ПОДСТРОКА("0123456789", Б.С + 1, 1)

СГРУППИРОВАТЬ ПО
    Дано.Код,
    Дано.Ссылка

УПОРЯДОЧИТЬ ПО
    Ответ
44 Teresa
 
01.08.14
11:09
(43) ого) спасибо, посмотрю)
45 echo77
 
01.08.14
11:18
Это же СКД!
Здесь все просто:
1. Создаем вычисляемое поле КодПодразделенияЧисло, для него выражение: "Вычислить(Подразделение.Код)"
2. Сортируем по этому полю
3. ...
4. ...
5. PROFIT!
46 Gucci76
 
01.08.14
11:23
Я смоторю уже накидали перевод строки в число.
А у меня еще базе не загрузилась, где предположительно это я делал ))))
47 DmitriyDI
 
01.08.14
11:25
(45) реально работает)
48 echo77
 
01.08.14
11:27
+(45)
Вот результат: http://s017.radikal.ru/i438/1408/8d/2775fdeafc90.png
Вот настройка вычисляемого поля: http://s018.radikal.ru/i518/1408/ad/d140d390b467.png

Надеюсь настроить СКД, чтобы была сортировка по этому полю сможете?
49 echo77
 
01.08.14
11:28
... надо будет этот вопрос включить в свою статью по полезными примерам СКД :-/
50 Teresa
 
01.08.14
11:55
(45) Работает, спасибо) Правда, не совсем понятно, как работает функция Вычислить() Надо будет почитать)

Спасибо всем! Миста - это чудовищная сила)
51 echo77
 
01.08.14
12:08
(50) Функция Вычислить() работает так же как во встроенном языке 1С :-)
52 echo77
 
01.08.14
12:54
Добавил. http://infostart.ru/public/267055/
Последний пример
53 Teresa
 
01.08.14
13:00
(52) утащила в копилку)