Имя: Пароль:
1C
1С v8
Как определить максимальное число в реквизите Код?
,
0 dj_7up
 
14.05.13
18:22
Как определить максимальное число в стандартном реквизите справочника "Код"? По умолчанию он является строкой.

Имея коды 1019 и 10115, при выполнении запроса по типу "МАКСИМУМ(НоменклатураИМ.Код) КАК Код" получаю значение 1019. Даже добавляя еще элемент с кодом 10000000.

Переведя реквизит Код в Число, отрабатывает, но неудобным для меня является пробел(разделитель) после каждых трех символов.

P.S.
Суть в том, что значение Код состоит из префикса 101 - это код родителя и 1,2,3,4 самого элемента. т.е. при достижении 1019 нужно что бы стало 10110, а не 1020. Тут все просто, перед +1 отрезаю Родителя от строки, делаю +1 и снова добавляю. Но загвоздка в получении запросом максимального числа в поле Код.

Заранее спасибо за ответы.
1 Мимохожий Однако
 
14.05.13
18:30
Дай пример хотя бы из 5 элементов и порядок, который ожидаешь
2 Волчара2010
 
14.05.13
18:34
максимум(выразить(код, как Число(12))
3 Mitriy
 
14.05.13
18:35
(2) ну-ну...
4 Волчара2010
 
14.05.13
18:36
формат(число, ""форматнаястрока)
5 mistеr
 
14.05.13
18:37
(0) Префикс должен быть слева, код справа, между ними нули.
Но это раньше надо было думать. А теперь только извращаться.
6 Fragster
 
гуру
14.05.13
18:37
установитьНовыйКод(Префикс), не?
7 Волчара2010
 
14.05.13
18:38
и еще ПОДСТРОКА
8 Mitriy
 
14.05.13
18:38
(5) можно переформировать и спать спокойно...
9 Mitriy
 
14.05.13
18:39
единственное - цифры в качестве префикса - тоже сильно не айс...
10 DS
 
14.05.13
18:41
(2) (4) (7) чо?
11 Зойч
 
14.05.13
18:43
тип строка, а следовательно максимум ищется для строк а не чисел
12 Mitriy
 
14.05.13
18:43
(0) автор, ты хотя бы скажи, это у тебя на этапе разработки, или просто столкнулся? Если первое, то лучше передумай и сделай по-человечески...
13 Волчара2010
 
14.05.13
18:47
(10) в очко!
14 dj_7up
 
14.05.13
21:02
(12)На этапе разработки.
(11) да, ищется максимум для строк.
(2) "максимум(выразить(код, как Число(12))" вот тут не понятно немного, можно подробнее что имело в виду?

Суть задачи:
Есть справочник, отдельный, никак не связан с учетом.
У каждого элемента первые три символа - это код родителя, далее номер элемента по порядку, в каждой группе(родителе) нумерация с 1.
т.е. Группа1 с кодом 101 имеет элементы 1011, 1012, 1013...
группа2 с кодом 102 имеет элементы 1021, 1022, 1023...
При добавлении нового элемента, выполняю запрос, ищу максимальное значение, прибавляю +1 и вставляю в форму ввода нового. Все красиво, пока не доберусь до 1019, дальше мне нужно 10110, а получается то 1020 :)
И то не беда, отсекаю строку 1019 родителем 101, получаю 9, прибавляю +1, приклеиваю родитель и получаю 10110. Но проблема в том, что запрос максимума всегда выдает значение 1019, даже если есть 10110, потому как максимум по строке.

Переведя реквизит Код в Число, с прибавлениями решается, но появляется пробел, 10 110, который жутко мешает при дальнейших манипуляциях. Во многих других местах я использую код как идент моего элемента.

Единственным выходом вижу использовать Число и каждый раз при использовании Кода отрезать ему Символы.НПП. Так ли это?
15 Mitriy
 
14.05.13
21:07
Если тебе поможет, то Формат(ТвойКодЧисло, "ЧГ="
) превратит число в красивую строку...
16 dj_7up
 
14.05.13
21:14
(15) Спасибо :) Именно так и превращаю. Но так придется превращать каждый раз, где я использую Код, а использую я его очень часто, при выгрузке данных в MySQL как ID, при формировании имени картинки товара в папке и в других местах где не приемлем пробел.

Потому и прошу совета у опытных, если другого выхода нет то буду каждый раз преобразовывать в "ЧГ=".

А как в самой конфигурации реализован поиск максимального значения, когда Код является строкой да еще и имеет буквенные префиксы? Не получается найти этот код.
17 Мимохожий Однако
 
14.05.13
21:15
Вот и использовал бы везде ID
18 dj_7up
 
14.05.13
21:21
(17) так и использую ID, вот у меня каждый ID и состоит из кодродителя+номер и храниться в поле Код.

Имеете в виду не привязываться к родителям? Но в таком случае тоже не получится прибавлять +1 к строке, опять столкнусь с тем, что 1019 больше чем 10110.

Задумка была в том, что визуально просто определить к какой группе относятся данные. Каждый элемент этого справочника - это товар интернет-магазина, у которого десятки картинок, при добавлении которых 1ска называет их например 1019_хххххх_.jpg и кладет в папку с именем родителя, получается путь 101/1019_хххххх_.jpg - это удобнее для синхронизации с сайтом.
19 Мимохожий Однако
 
14.05.13
21:22
Я не про твой ID, а про внутренний 1С.
20 Мимохожий Однако
 
14.05.13
21:24
есть еще один дикий вариант - создай дополнительный числовой реквизит для поиска. Но это от безысходности только.
21 dj_7up
 
14.05.13
21:28
(19) дык его ж менять нельзя вроде как? а мне важно что бы он имел необходимый мне Вид.

(20) Да, скорее от безисходности :)

Тогда что скажите, если просто везде при выгрузках и прочем, в т.ч. в форме отображения и ввода нового Кода использовать "ЧГ=" и забить? :) Ничего что Стандартный реквизит Код будет числом у этого справочника, а у остальных строкой? Я правильно понимаю, что в конфе его сделали строкой только для возможности использования буквеного префикса?
22 Мимохожий Однако
 
14.05.13
21:35
Тема помаленьку ушла от заявленной ))). По большому счету, использовать код элемента для поиска и синхронизации не рекомендуется. Для этого нужен GUID, который не меняется даже при изменении кода, наименования и других реквизитов элемента.
23 Fragster
 
гуру
14.05.13
21:37
не знаю, зачем автору такой изврат, но может быть подойдет числовая нумерация в пределах подчинения и ПолныйКод() когда нужно получить извращенную строку из сабжа?
24 dj_7up
 
14.05.13
21:58
(22) Пардон если некоторые вопросы выглядят глупыми, я в 1с не пишу, я как-то на ПХП все больше, просто интересно все же докопаться до истины. Изначально был реквизит Модель, в котором все это и происходило, но по скольку проблема с пробелами и поиском максимума была такая же, решил использовать код, дабы не плодить лишних реквизитов.

А можно немного подробнее, почему нельзя использовать Код элемента для поиска? И что имеется в виду под синхронизацией? Спасибо.

(23) А в чем изврат то? :) Спасибо, про "числовая нумерация в пределах подчинения" почитаю, а вот что за функция ПолныйКод()?
25 mistеr
 
14.05.13
22:01
(14) А зачем все эти извращения? Стандартные механизмы для слабаков?
26 EvgeniuXP
 
14.05.13
22:02
да сделай отдельный реквизит, перемножь при записи код (перед этим расформируй как надо) и запиши как число - в запросе получай.
27 EvgeniuXP
 
14.05.13
22:04
по коду синхронизируют только в 7.7 от безысходности, в 8.х по UID-у.
28 dj_7up
 
14.05.13
22:11
(25) Как предлогаете применить стандартные механизмы к данному решению?

(26) Зачем же его перемножать то? :) В чем преимущество хранения этого значения в отдельном реквизите, а не в коде, я и надеюсь получить ответы...

(27) Что все таки подразумевается под понятием "синхронизация" касательно обсуждаемой темы? Я ничего не синхронизирую вроде как :) В интернет-магазин я делаю только выгрузку, одностороннюю.
29 dj_7up
 
14.05.13
22:13
На всякий случай уточню, я только создаю всю это безобразие, структуру, т.е. хотелось бы сделать по уму, посему и обратился к помощи великих программеров. :)
30 mistеr
 
14.05.13
22:22
(28) Чтобы что-то применить, нужно внятно поставить общую задачу, чего пока сделано не было.

В 1С есть прекрасно работающие средства для поддержки иерархии в справочнике, без необходимости каких-то манипуляций с кодом.
31 dj_7up
 
14.05.13
22:30
(22) Только доехал что Вы имели в виду :) GUID это что-то вроде 83a7b6bb-b8bc-11e2-80b8-c860006d8dde у каждого элемента справочника в 1с, но мне его использование слишком усложнит задачу, долго рассказывать, думаю меня выгонят с форума если начну :)
32 Злопчинский
 
14.05.13
22:34
Имея строки как числа - приведи к "единому знаменателю" - выровняй разрядную сетку.
"Имея коды 1019 и 10115" - правильно будет
"Имея коды 01019 и 10115"- соответственно строки в этом случае будут сравниваться как числа одинаковой разрядности
33 EvgeniuXP
 
14.05.13
22:39
(32) хвост может оказаться не известным...

101123 и 1019 уже

101123
001019 будет
34 hhhh
 
14.05.13
23:06
(31) ты вот скажи, разве в ПХП строка "9" меньше чем строка "10"?
35 dj_7up
 
14.05.13
23:44
(34) Строка, нет. Поэтому для сравнения в 1с и используются нули перед цифрами, т.е. заполнены все разряды. Верно?
Посему я и решил использовать Реквизит Код как число, но появились неудобства с пробелом. Вот и обратился с такой дилемой за советом.
36 hhhh
 
14.05.13
23:50
(35) тогда почему такой вопрос задаешь? ведь все знают, что

"1019" > "10115" и
"1019" > "1000000000"


просто открой типовую и посмотри там. Вопрос элементарно решается добавлением нулей слева.

и найти элементарно, щелкаешь сортировку по коду, по убыванию, максимальный код самым верхним будет.
37 Зойч
 
14.05.13
23:57
открой для себя Формат
38 dj_7up
 
14.05.13
23:58
(36) так мне как раз не подходит добавление нулей. Мне важно, что бы значение было 1019, 10115 и т.д.

Остается вариант с видом Число и каждый раз при необходимости делать "ЧГ=", а также в форме отображения установить подобный формат "ЧГ=", верно?
39 dj_7up
 
14.05.13
23:59
(37) Да вот как раз открыл, спасибо :) пробую его использовать.
40 hhhh
 
15.05.13
00:40
(38) просто сделай реквизит мойКод, такой какой тебе подходит. А Код делай такой как у всех.
41 dj_7up
 
15.05.13
00:42
(40) Понял, спасибо. А в чем тогда преимущество? Код будет бесполезен для меня, мне придется его просто скрыть и нигде не использовать.