Имя: Пароль:
1C
 
Порядок в динамическом списке без префиксов
0 bebibo
 
14.03.24
23:20
Всем здравствуйте!
Посоветуйте как сделать порядок по номеру без префиксов в форме списка документа (дин.список)?
1 bebibo
 
14.03.24
23:21
При открытии выгрузить дин список в ТЗ, отсортировать как надо и подгрузить на форму? Но у меня не получается ТЗ в дин список пульнуть
2 kubik_live
 
14.03.24
23:38
Добавить колонку, а в нее из ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(...) и сортировать по ней?
3 bebibo
 
14.03.24
23:49
(2) Мне нужна сортировка по номеру, но номера в документах такие:

ДПН00-000001
ДФН00-000003
СП00-000044
СПНФ-000008

Хочу в ТЗ перебрать номера, взять справа цифры до нулей и сортировать по ним ТЗ, потом загрузить в дин список готовую ТЗ
4 b_ru
 
14.03.24
23:53
ну в таком тривиальном случае как в примере, ПОДСТРОКА(Номер,7,100)
5 kubik_live
 
15.03.24
00:00
Найти() и Сред() в помощь
6 kubik_live
 
15.03.24
00:07
+(2)
"А чем .. профессор Мечников тебе не понравился?" ©

// Получает номер документа для вывода на печать; из номера удаляются префиксы и лидирующие нули.
// Функция:
// отбрасывает префикс организации,
// отбрасывает префикс информационной базы (опционально),
// отбрасывает пользовательские префиксы (опционально),
// удаляет лидирующие нули в номере объекта.
//
// Параметры:
//    НомерОбъекта - Строка - номер или код объекта, который преобразуется для вывода на печать.
//    УдалитьПрефиксИнформационнойБазы - Булево - признак удаления префикса информационной базы.
//    УдалитьПользовательскийПрефикс - Булево - признак удаления пользовательского префикса.
//
// Возвращаемое значение:
//     Строка - номер на печать.
//
Функция НомерНаПечать(Знач НомерОбъекта, УдалитьПрефиксИнформационнойБазы = Ложь, УдалитьПользовательскийПрефикс = Ложь) Экспорт
7 bebibo
 
15.03.24
00:17
Я не хочу в запросе делать, так как бывает еще такой номер (Документ наш от 23 г.).
Все такие не по формату их в самый низ.

Как сделал:
При открытии дин список в ТЗ - пересорт в ТЗ - далее готовую тз надо обратно в дин список. Как это сделать?
Есть мысли подменить текст запроса, типа выбрать * из &МояГотоваяТЗ

Но не пойму где параметр заполнить..
8 bebibo
 
15.03.24
00:18
(6) Ну так в любом случае нужно же обход делать и перезаполнять дин список же?
9 bebibo
 
15.03.24
00:23
(8) Если есть вариант проще, то я за.
ПрефиксацияОбъектовКлиентСервер.НомерНаПечать - хорошая штука. Буду использовать её. Но как Вы предлагаете обойти динамический список и перезаполнить его?
10 Garykom
 
15.03.24
00:37
https://wonderland.v8.1c.ru/blog/novye-funktsii-yazyka-zaprosov-i-sistemy-komponovki-dannykh/?sphrase_id=663464

И наймите программиста, чтобы запрос дин.списка дописал
Но там куча ограничений, возможно не выйдет
Простейший вариант попробовать
ПОДСТРОКА(Номер, СТРНАЙТИ(Номер,""-""), 100)
11 bebibo
 
15.03.24
00:38
(10) Не подойдет.
Мне нужна функция "ПрефиксацияОбъектовКлиентСервер.НомерНаПечать". Она делает номер так, как мне нужно.
Но как мне обойти динамический список?
Тип данных Динамические списки не относятся к универсальным коллекциям значений, у динамических списков нет метода обхода строк..как быть тогда?
12 Garykom
 
15.03.24
00:43
Однако работает
13 Garykom
 
15.03.24
00:44
(11) Подучить 1С.
Чтобы понимать что можно а что нельзя ибо ограничения платформы.
14 bebibo
 
15.03.24
00:46
(12) не везде есть оказывается "-"
Сейчас посмотрел, есть просто: "СФ00000076"
15 Garykom
 
15.03.24
00:50
(14) В этом случае согласиться на просто ПРАВ(Номер, 6)
Если разная длина по кол-ву 0 то все тяжко становится
Преобразовать в запросе строку в число - ну это такое
16 bebibo
 
15.03.24
00:50
Кто нибудь подскажет как всё таки сделать из такой нумерации динамического списка:

ДПН00-000001
ДФН00-000003
ДФН00-000005
СПР00-000002
СПР00-000004
СПНФ-000006

Такую:

ДПН00-000001
СПР00-000002
ДФН00-000003
СПР00-000004
ДФН00-000005
СПНФ-000006

То есть забить на префиксы
17 Garykom
 
15.03.24
00:52
(16) прочитай внимательно (15)
если не устраивает то см (10)
18 bebibo
 
15.03.24
00:57
(17) Неужели нельзя нормально сделать? Это же не удобно!
Чтобы найти документ ДПН00-000012, когда я нахожусь на СПР00-001002 - нужно пролистать всё до СПР00-000001, а потом еще все ДПН00, а там их тоже больше 1000..
Это удобно? Бред почему так сделали?
19 bebibo
 
15.03.24
01:05
(15) Плохо, что есть номера с разным количеством нулей(
Из-за них всё сбивается(
20 bebibo
 
15.03.24
01:06
(19) Или вот например(
21 H A D G E H O G s
 
15.03.24
02:27
Добавить в документ реквизит
НомерБезПрефикса, индексированный с допупорядочиванием.
Заполнять его в передзаписью()
Заполнить для уже существующих
Вывести в список

Забыть о проблеме
22 bebibo
 
15.03.24
07:26
(21) спасибо, попробую сейчас
23 Волшебник
 
15.03.24
07:29
(21) Собьётся из-за разного количества нулей. Тогда лучше добавить поле "Порядок" и заполнять его номером без префикса с нормализованным количеством нулей (добавить ведущие, если надо).
24 DimVad
 
15.03.24
07:31
(23) Можно поле сделать числовым.
25 Волшебник
 
15.03.24
07:54
(24) Это как раз не рекомендую. Лучше ведущие нули, чем числовое поле.
26 DimVad
 
15.03.24
07:59
(25) А почему не рекомендуется ?

Я понимаю что строковое поле позволяет вести префиксы. Префиксы существуют как разделитель. Например между организациями. Но ему-то как раз нужно всё вместе.

Вроде как число автоматически даст идеальную сортировку. Или проблема в составных индексах которые 1С создаёт для документов ?
27 Волшебник
 
15.03.24
08:07
(26) Потому что нельзя вставить один элемент между другими, или у Вас порядок должен быть дробный
28 bebibo
 
15.03.24
09:12
Сделал так:
Создал реквзит документа "НовНомер".
ПередЗаписью пишу так:
Расш1_НовНомер = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Номер,Истина,Истина);

Далее в консоле смотрю, получилось, но не совсем то:
29 bebibo
 
15.03.24
09:13
(28) Я понимаю логически почему оно здесь оказалось, но как это исправить? 112 должно быть между 111 и 113, а не тут.
30 bebibo
 
15.03.24
09:29
(29) Сделал поле числовым - всё норм отрабатывает.
Остался только еще 1 нюанс - слеши.
Как с ними предложите быть?
31 Garykom
 
15.03.24
09:34
(30) Логично что добавить второе поле для "слеши", например "НомерПостфикс"
И сортировать по очереди сначала первое, затем второе

Но это не спортивно (21)!

ЗЫ Можно и третье "НомерПрефикс" заодно, вдруг понадобится в будущем
32 H A D G E H O G s
 
15.03.24
10:10
(30) отсутствия слеша принимай за ноль.
При наличии слеша вытаскивай заслушевую цифру.
Ну и все это полученное добавляй к основному числу как к строке перед конвертацией в число.
33 Волшебник
 
15.03.24
10:11
(30) Сделайте поле строковым и добавьте ведущие нули
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой