Имя: Пароль:
1C
1C 7.7
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 цифр. Вы подтвердили, спасибо.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан