|
v7: Уникальный ID документа | ☑ | ||
---|---|---|---|---|
0
spectre1978
15.05.15
✎
12:10
|
Нужно для семерки сделать уникальный ID документа из цифр и латиницы, как можно более короткий (в идеале 10-12 знаков), чтобы впоследствии по нему можно было документ в той же базе найти. Нет ли готовых наработок? Изобретать велосипед неохота. Про ЗначениеВСТрокуВнутр и ЗначениеВСтроку знаю - не подходит потому что мусора в строке много, знаки препинания, скобки.
|
|||
1
spectre1978
15.05.15
✎
12:11
|
пока приходит в голову соорудить строку из номера и года, но еще нужно с префиксами на кириллице что-то сделать
|
|||
2
Ёпрст
15.05.15
✎
12:14
|
(0) iddoc документа, если че, 9 символов.
А про ЗначениеВСТрокуВнутр .. ты не знаешь, как бэ. |
|||
3
spectre1978
15.05.15
✎
12:15
|
(2) каким образом получить?
|
|||
4
spectre1978
15.05.15
✎
12:16
|
и каким образом по нему найти док?
|
|||
5
ДенисЧ
15.05.15
✎
12:16
|
2с+= очень поможет
|
|||
6
ДенисЧ
15.05.15
✎
12:16
|
1с++
|
|||
7
spectre1978
15.05.15
✎
12:17
|
Понял. А если без сторонних разработок?
|
|||
8
Ёпрст
15.05.15
✎
12:18
|
(7) ознакомься, что есть ЗначениеВСтрокуВнутр и.. всё найдется и без ВК
|
|||
9
spectre1978
15.05.15
✎
12:18
|
(8) где почитать?
|
|||
10
Spyke
15.05.15
✎
12:19
|
(0) Использовать v7plus.dll
ЗагруженаВ7Плюс = 1; Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") <> 1 Тогда Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "ExtForms\" + "v7plus.dll") <> 1 Тогда Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "v7plus.dll") <> 1 Тогда //Предупреждение("Компонента v7plus.dll не найдена! Продолжение работы невозможно!", 10); //СтатусВозврата(0); //Возврат; ЗагруженаВ7Плюс = 0; КонецЕсли; КонецЕсли; КонецЕсли; Если ЗагруженаВ7Плюс = 1 Тогда Попытка глНТТРСистИнформ = СоздатьОбъект("AddIn.V7SysInfo") Исключение КонецПопытки; Далее в глобальнике Функция глСоздатьИдентификатор() Экспорт Если ПустоеЗначение(глНТТРСистИнформ) = 1 Тогда Возврат(""); Иначе Возврат(СокрЛП(глНТТРСистИнформ.СоздатьGUID())); КонецЕсли; КонецФункции // глСоздатьИдентификатор() Далее привводе нового документа запихивать в реквизит динной 36 символов |
|||
11
drcrasher
15.05.15
✎
12:19
|
(10) извращение
(9) в СП |
|||
12
spectre1978
15.05.15
✎
12:20
|
(10) не подойдет, документов уже много, править базу не вариант. Хотелось бы обойтись уже имеющейся инфой без добавления лишних сущностей
|
|||
13
spectre1978
15.05.15
✎
12:21
|
+ (12) то же касается ВК. Хотелось бы стандартными средствами, без изменения базы, без навешивания ВК кроме стандартной v7plus
|
|||
14
spectre1978
15.05.15
✎
12:22
|
(11) В СП ничего нет
ЗначениеВСтрокуВнутр(<?>); Синтаксис: ЗначениеВСтрокуВнутр(<Объект>) Назначение: Преобразование значения объекта агрегатного типа в строковое системное представление. Возвращает: представление значения объекта в строковом системном виде. Параметры: <Объект> - значение объекта агрегатного типа данных которое нужно преобразовать. Подробнее см. в документации, глава ''Системные процедуры и функции'' |
|||
15
spectre1978
15.05.15
✎
12:23
|
(8), (14) я так понимаю, речь идет о том чтобы разодрать эту строку и чего-то из нее достать, а потом собрать. Правильно ли я понял? Где можно почитать про формат строки?
|
|||
16
Cap_1977
15.05.15
✎
12:24
|
Сообщить(ЗначениеВСтрокуВнутр(ТекДок));
Блеать |
|||
17
spectre1978
15.05.15
✎
12:25
|
(16) спокойнее :)
вот строка {"O","0","0","1611","0","0"," 0 "} что мне с ней сделать? |
|||
18
Ёпрст
15.05.15
✎
12:26
|
И вообще, если нет уриба, то и 6 символов от iddoc использовать можно. И ..если перевести в систему счисления с большим основанием, то и еще меньше длина строки получится.
|
|||
19
spectre1978
15.05.15
✎
12:27
|
Ребят, это зашибись что вы такие загадочные, но может вы все-таки либо объясните по-нормальному, либо скажете где прочитать?
|
|||
20
Ёпрст
15.05.15
✎
12:28
|
||||
21
spectre1978
15.05.15
✎
12:29
|
(20) О! Так бы сразу. Спасибо!
|
|||
22
Cap_1977
15.05.15
✎
12:30
|
(21) Лентяйка ;(
|
|||
23
1Сергей
15.05.15
✎
12:32
|
+ для перевода в/из тридцатишестиричную, воспользуйтесь:
_idtostr() и _strtoid() |
|||
24
1Сергей
15.05.15
✎
12:35
|
хотя, если идет выгрузка из/в обособленных баз со схожей структурой (родственные... да, и не только), то я бы на этот id не возлагал больших надежд. Будут повторяться с очень высокой вероятностью.
|
|||
25
spectre1978
15.05.15
✎
12:37
|
(24) но в этом случае можно тем или иным способом обозначить префикс базы?
|
|||
26
1Сергей
15.05.15
✎
12:37
|
(25) не можно, а нужно :)
|
|||
27
Ёпрст
15.05.15
✎
12:38
|
(25) он уже и так есть в iddoc - последние 3 символа
|
|||
28
spectre1978
15.05.15
✎
12:38
|
правильно ли я понял, что вот это вот " 0 " и есть строка в 36-ричной кодировке?
|
|||
29
Ёпрст
15.05.15
✎
12:38
|
(28) так обозначается пустой шввщс
|
|||
30
Ёпрст
15.05.15
✎
12:39
|
iddoc
|
|||
31
Ёпрст
15.05.15
✎
12:41
|
Если нужен обмен между разными базами, ставь мод.
Правила рисуются за час лююбые. Между любыми базами. |
|||
32
1Сергей
15.05.15
✎
12:42
|
(27) это если риб
|
|||
33
spectre1978
15.05.15
✎
13:31
|
(18) я опять по поводу IDDOC.
По описанию все-таки не совсем понял, как он заполняется. Изначально полагаем, что он забит символами пробела, т.е. 0x20. Они незначащие. А вот дальше начинается интересное. У меня в базе встречаются иддоки, в которых заполнен один десятый по счету от начала строки символ. Есть - где заполнены 9 и 10 символы. У более свежих доков забито все с 6 по 13. Получается, что выравнивания по правому краю строки нет? И где тогда хранится префикс, в каких символах? В описании написано вот так: Седьмой параметр списка - строка 13 символов: 01-10 ИД вида объекта 11-20 ИД объекта 21-23 ИД информационной базы (УРИБ). Какие 21-23, если строка 13 символов? Я запутался. |
|||
34
spectre1978
15.05.15
✎
15:07
|
Кажется, понял. Выравнивание кода идет от 10 символа справа налево, с 11 по 13 - номер ИБ, дополенный нулями. Используются десятичные цифры.
|
|||
35
Garykom
гуру
15.05.15
✎
15:26
|
Когда то давно делали самопальный УРИБ на 1С 7.7 для обмена через xml и ftp.
Для синхронизации сделали коды строковые подлиннее. И просто ГУИДы через ВК получали и в код писали. С небольшим извращением (base64) для хранения 16 байт guid в 24 макс длина кода в 1С 7.7 |
|||
36
Serginio1
15.05.15
✎
15:30
|
(31) Я и сейчас делаю обмен между 7 кой и восьмеркой.
Длыя получения GUIDа вк не нужна Функция ПолучитьНовыйГуид() TypeLib = CreateObject("Scriptlet.TypeLib"); NewGUID = TypeLib.Guid(); TypeLib=""; Возврат Нрег(Сред(NewGUID,2,36)); КонецФункции |
|||
37
Spyke
15.05.15
✎
15:36
|
(36) Аналог в (10) но ТС отверг
|
|||
38
spectre1978
15.05.15
✎
16:03
|
(37) коды уже есть, менять их не хочется, равно как не хочется модифицировать документы. А главное - это и не нужно. IDDOC спасает, вполне, но я хочу поподробнее узнать структуру. (18) пишет про 6 идентифицирующих символов... начиная с какого они отсчитываются? Если в 11-13 префикс, то получается что они идут с 5 по 10. Может ли быть что-то значимое в первых четырех?
|
|||
39
Torquader
15.05.15
✎
19:50
|
(38) В (17) вас обманули, ID будет написан вместо последнего нуля, если сделать ЗначениеВСтрокуВнутр(Док.ТекущийДокумент())
Причём, у всех документов ИД общие. Ид состоит из 10 цифр (число 4 байта) и трёх символов РИБ. Чтобы обратно получить ссылку документа, можно собрать строку с ИД вида (в (17) число 1611) подставить Ид-вида любого документа и выполнить поиск Док.НайтиДокумент(ЗначениеИзСтрокиВнутр(НашаСтрока)); всё получится. |
|||
40
spectre1978
15.05.15
✎
20:55
|
(39) Уже сделал нужный мне механизм, основываясь на предположении что ид из 10 цифр. Вы подтвердили, спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |