Id в 1с что это

Обновлено: 07.07.2024

Функция ПолучитьИД_Вариант1(Объект)
Перем Стр;
Стр=ЗначениеВСтрокуВнутр(Объект);
СЗ=СоздатьОбъект("СписокЗначений");
СЗ.ИзСтрокиСРазделителями(Сред(Стр,2,СтрДлина(Стр)-2));
Возврат СЗ.ПолучитьЗначение(СЗ.РазмерСписка());
КонецФункции
//_____________________________________________________________________________

Функция ПолучитьИД_Вариант2(Объект)
Перем Стр;
СЗ=СоздатьОбъект("СписокЗначений");
СЗ.ДобавитьЗначение("",Объект);
СЗ.ПолучитьЗначение(1,Стр);
Возврат Стр;
КонецФункции
//_____________________________________________________________________________

Процедура Сформировать()
// Пусть "Объект" - это реквизит формы типа "Справочник"
Сообщить("Объект: "+Объект.ТекущийЭлемент());
Сообщить("Вариант 1: "+ПолучитьИД_Вариант1(Объект.ТекущийЭлемент()));
Сообщить("Вариант 2: "+ПолучитьИД_Вариант2(Объект.ТекущийЭлемент()));
КонецПроцедуры

Если нужно получить id в том виде, в котором он хранится в таблицах 1С, воспользуйтесь недокументированной функцией _IdToStr(),
н-р: Сообщить("Вариант 1: "+_IdToStr(ПолучитьИД_Вариант1(Объект.ТекущийЭлемент())));
Подробнее о недокументированных возможностях 1С можно посмотреть здесь.

Необходимо добавить, что если база с использованием УРБД, то система не контролирует уникальность этого идентификационного номера.
Необходимо еще к номеру добавлять место создания, т.е. префикс той базы, где был создан объект.

Формат строки, полученной с помощью ф-ии ЗначениеВСтрокуВнутр():

Список = СоздатьОбъект("СписокЗначений");
Список.ДобавитьЗначение("O"); // тип
Список.ДобавитьЗначение("0"); // длина
Список.ДобавитьЗначение("0"); // точность
Список.ДобавитьЗначение("255"); // ИД вида объекта
Список.ДобавитьЗначение("0"); // флаг неотр. (?)
Список.ДобавитьЗначение("0"); // флаг разделения триад (?)
Список.ДобавитьЗначение("9548"); // ИД объекта
Зн = ЗначениеИзСтрокиВнутр("")

Седьмой параметр списка - строка 13 символов:
01-10 ИД вида объекта
11-20 ИД объекта
21-23 ИД информационной базы (УРИБ).
В таком виде он будет, если передавать не Объект.ТекущийЭлемент(), а просто Объект.

Почему нельзя упорядочить по ссылке, если в ней содержится дата создания?
Как уже было описано, guid изначально был придуман для РАСПРЕДЕЛЕННЫХ систем, в которых ПРОБЛЕМА УНИКАЛЬНОСТИ идентификаторов решена полным ОТКАЗОМ ОТ АВТОИНКРЕМЕНТА в пользу СЛУЧАЙНЫХ чисел и специальных техник. GUIDы случайны и неповторяемы по определению и в этом его достоинство и недостаток. Например, в предопределенных элементах и произвольных идентификаторах используется Random GUIDs (Version 4). В "типизированных" же Time-Based GUIDs (Version 1).

Можно ли вытащить время из гуида?
Можно. Но не нужно.
bdb62d89-cede-11e4-b12b-d4ae52b5e909
Алгоритм:
дата содержится в первых символах, bdb62d89-cede-11e4 которые нужно переставить задом наперед: 11e4-cede-bdb62d89
первый символ отбрасываем, убираем "лишние" знаки "-"(тире)
интервал в десятых долях микросекунд (HEX) получается равным: интервал16= 1E4CEDEBDB62D89
переводим его в десяничный интервал интервал10 = HexToDec(интервал16);
в результате получаем: интервал10 = 136 461 344 788 852 105
находим интервал в секундах: интервалСек = интервал10 / 10 000 000;
Делаем сдвиг даты от [3]

Почему части времени идут "задом-наперед"?
"Так сложилось" ;)
Например потому что guid'ы появились задолго до того, как до них добрались руки ietf и баз данных.
Или потому что платформа написана на C, а не на Java, а как мы знаем из асемблера архитектура x86 имеет little-endian byte order.
Или, как говорит википедия, использовалось 2 варианта: для передачи по сети "on-wire" "network" (big-endian) byte order, а для хранения "native" (little-endian) byte order.
В любом случая я не знаю как там было и можно только догадываться.
[2] [3]

Если отчет из одной конфигурации копипастой тащу в другую - ID сохранится его?(в моей его не было) (c) 2michael

Ответ: При копировании объекта из одной конфы в другую _копипастом_ внутренний гуид меняется!
НО: при сравнении объединении этого не видно!, так как происходит сопоставление по имени.
НО: это не касается и предопределённых данных! Если добавлять их вручную, а потом конфу разработки сравнить-объединить с боевой - возникнут дубли в справочнике!
В edt же есть режим сравнения только по guid.

При замене отчета в дереве конфигурации командой "Заменить на внешнюю обработку, отчет. " меняется ли внутренний идентификатор объекта (отчета)? (с) Pandoch upd:02.07.20

Ответ: Нет, гуид при замене из файла остаётся прежним

Другая вариация вопроса: Есть две разные конфы. Но в них есть одинаковый объект метаданных например документ "Покупка". Как можно получить внутренний идентификатор этого объекта в обеих базах, используемый в сравнении и объединении, чтобы удостовериться, что этот объект, не зависимо от имени, замениться, а не дублируется ? Как я понял ЗначениеВСтрокуВнутр() дает не тот ID который нужен мне.

При каждой выгрузке во внешний отчет/обработку guid генерируется заного. При загрузке из файла - востанавливается. Это позволяет хоть 10 раз выгрузить отчет/обработу во внешний файл, и каждый из этих файлов можно будет открыть параллельно в клиенте.

ЗначениеВСтрокуВнутр() выдает идентификатор прикладного типа, а не внутреннего объекта метаданных. Помимо внутреннего идентификатора у каждого объекта метаданных есть идентификаторы типов. Например ОтчетМенеджер.<Имя отчета> и ОтчетОбъект.<ИмяОтчета>:


Все типы имеют свои идентификаторы, но при загрузке через "Заменить на внешнюю обработку, отчет. " они, так же как и идентификатор метаданных, заменяются на текущие.

Например - загрузка в отчет ABCАнализПокупателей внешнего отчета ДебиторскаяЗадолжность.epf вызовет лишь добавление суффикса (такой отчет уже есть в конфигурации), а все идентификаторы остаются прежними.


Скрин до загрузки - после загрузки:

Идентификаторы не изменились.

Почему используется "перевернутый" формат UUID внутри 1с?
<Объект не найден> (26:80f408002771598b11e7a3f0a3a64c3b)
Не знаю. Знаю только что первая цифра соответствует имени таблицы в sql: Reference26 -> ВидыНоменклатуры



[1]

Есть же спецификация?
Есть.

Расшифровываю:
Timestamp - это 60-битное число, содержащее количество 100-наносекундных интервалов с 15 октября 1582 г.
Часть low обнуляется каждые 2^32 / 10^7 / 60

7 минут, часть mid через 1 год, часть hi сами представляете.

Version - старшие 4 бита в седьмом октете, содержат тип гуида.
0x0001 1 time-based version
0x0010 2 DCE Security version (POSIX UIDs)
0x0011 3 name-based version (MD5 hashing)
0x0100 4 randomly generated version
0x0101 5 name-based version (SHA-1 hashing)


Clock Sequence - используется чтобы избежать появления дубликатов, когда часы переводятся назад или меняется идентификатор узла. Если предыдущее значение счетчика известно - то увеличивается на единицу, иначе берется случайное число.

Node - содержит физический MAC-адрес сервера. Дада, проверьте ipconfig /all ;)

Примеры? Есть их у меня.
Мы же "программисты", накодим функции:

Проверим ссылку обычного документа:

Проверим ссылку, сформированную вручную:

Проверим работу счетчика "уникальности":

Можно даже так:


Какой мак-адрес у меня, вы уже знаете ;)

ps: под "упорядочить по ссылке" везде имеется ввиду сортировка в порядке создания ссылок и вообще в каком-либо порядке, отличном от сравнения в побитовом бинарном формате хранения бд.

Ну вот и все.

Надеюсь, теперь мысль о том, чтобы "упорядочить по ссылке", я из вас вытряхнул окончательно.

Идентификатор участника ЭДО - это уникальный номер, который выдает оператор при регистрации участника в системе ЭДО. Он состоит из последовательности цифр и букв, например, 2AE11284CDD-D935-4603-881F-92DDB27D6BA0. По своей сути, идентификатор является "адресом" организации в системе обмена электронными документами и его может запросить контрагент или оператор для настройки роуминга. В этом случае идентификатор желательно передавать в редактируемом виде, т.е. скопировать код и вставить в ответ на запрос. Во многих системах идентификатор ЭДО отображается в карточке организации, где приводятся все ее реквизиты.

Как посмотреть идентификатор ЭДО в сервисе 1С-ЭДО

Пользователю 1С-ЭДО необходимо перейти в справочник "Организации". В представленном списке нужно выбрать свою организацию и нажать «ЭДО – Учетные записи».

В открывшемся окне будут показаны все учетные записи ЭДО выбранной организации.

Затем необходимо открыть интересующую учетную запись. На вкладке «Основное» представлены регистрационные данные организации. Идентификатор можно скопировать по соответствующей кнопке справа.

Примечание. При настройке обмена с контрагентом в 1С-ЭДО можно выбрать идентификатор контрагента из представленных в сервисе или указать его вручную, если необходимый идентификатор отсутствует в списке доступных. Настройка происходит согласно инструкции.

Следующая информация поможет пользователю и его контрагенту, если контрагент использует другое решение ЭДО и затрудняется с поиском идентификатора ЭДО.

Как найти идентификатор в системе Такском-Файлер

Идентификатор указан в разделе «Настройки – Идентификатор»

Как найти идентификатор в системе Астрал Онлайн

Идентификатор указывается в верхней части раздела «Личный кабинет – Моя организация»

Как найти идентификатор в системе СБИС ЭДО

В СБИС идентификатор ЭДО есть в Карточке организации: при наведении курсора на значок в виде галочки отобразится информация о регистрации организации в СБИС ЭДО. Идентификатор организации можно посмотреть в разделе «Конфигурация / Наша компания».

Как найти идентификатор ЭДО в системе Диадок

Просмотреть идентификатор можно в меню «Реквизиты и настройки - Реквизиты организации».

Инструмент предназначен для получения расширенной информации о ссылочных значениях объектов информационной базы. Говоря простым языком - обработка позволяет получить уникальный идентификатор ссылки и еще расширенный набор информации. Вместе с такими инструментами как "Транслятор запросов 1С" и "Просмотр и анализ структуры базы данных (отчет на СКД)" (новая версия от 07.01.2020) позволяет выполнять анализ работы платформы 1С в части работы с базой данных, а также расследовать различные инциденты в ее работе.


Основными возможностями инструмента являются:

  • Получение информации о ссылке на объект информационной базы:
    • Уникальный идентификатор
    • Навигационную ссылку
    • Уникальный идентификатор в терминах SQL Server
    • Уникальный идентификатор в терминах PostgreSQL
    • Представление "битой" ссылки
    • Уникальный идентификатор типа
    • Числовой идентификатор типа ссылки
    • Полное имя объекта метаданных
    • Идентификатор типа ссылки в терминах SQL Server и PostgreSQL
    • Дата создания ссылки из уникального идентификатора


    • Поиск ссылки и уникальному идентификатору (в т.ч. в терминах SQL Server и PostgreSQL, навигационной ссылке и представлению "битой" ссылки.
    • Поиск имя метаданных и числового идентификатора типа по уникальному идентификатору типа.

    Требования к работе:

    • Платформа 1С версии 8.3.5 и выше.
    • Режим работы не имеет значения (клиент-серверный или файловая база. СУБД не имеет значения).
    • Только управляемые формы. Для использования в обычном приложении используйте известные обходные пути.


    Ниже в примерах мы разберем некоторые кейсы по использованию инструмента.

    Принцип работы

    Все реализовано штатными возможностями платформы 1С без каких-либо подключений к базе данных напрямую или внешних компонент.

    Примеры использования

    Рассмотрим несколько случаев применения обработки.

    Получение уникального идентификатора

    В некоторых задачах необходимо получить уникальный идентификатор ссылки на объект. Это может пригодиться при разборе ситуаций с обменом данных, поиска ссылки по GUID из кода встроенного языка и др. С помощью данного инструмента это делается проще простого.

    GUID у Вас в кармане! причем есть также идентификаторы в терминах СУБД, которые можно использовать в прямых SQL-запросах к базе. В нашем примере запросы выглядели бы так.

    Вот так можно использовать фильтр по ссылке для прямого запроса к базе SQL Server:

    И практически также для PostgreSQL:

    Все просто, не так ли?

    Еще одной вишенкой на торт будет возможность получения уникального идентификатора для значений перечисления. Да, эти значения не имеют метод "УникальныйИдентификатор()", но есть другие пути его получения. А после можно его хоть в прямых SQL-запросах к базе начать использовать. Вот так выглядит получение GUID'а для значений перечисления.

    Все это мне ни раз пригождалось, когда нужно было:

    • Из ошибок от SQL Server найти значения из запроса по GUID'ам
    • Поиск существующих элементов в базе для идентификатора. Например, для поиска причин ошибок с дублирующейся ссылкой.
    • Изучение работы платформы 1С в некоторых ситуациях.

    Изначально именно для этой функции эта обработка создавалась.

    Поиск ссылок по GUID

    Обратная ситуация - у Вас есть уникальный идентификатор, но при этом неизвестно какая ссылка за ним скрывается. С помощью обработки Вы можете найти все ссылки, которые имеют искомый GUID. Причем поиск можно выполнять как по стандартному GUID'у платформы 1С, так и по значениям идентификатора на стороне СУБД.

    Пару кликов и все готово! Если будет найдено несколько ссылок, то просмотр переключится в режим списка.


    Здесь Вы можете работать с полями также, как и в предыдущем случае.

    Зачем идентификаторы типа

    Инструмент содержит дополнительную информацию о типе ссылки: уникальный идентификатор типа, числовой идентификатор и имя метаданных. С именем метаданных все ясно, а по поводу остального нужно пояснить.

    Числовой идентификатор - Вы могли его видеть в представлении бито ссылки. Например, вот здесь:

    <Объект не найден> ( 230 :51ed67a3-7220-11df-b336-0011955cba6b)

    число 230 - это как-раз и есть числовой идентификатор типа. Но что это и зачем он нужен? Если мы посмотрим на структуру хранения в базе данных (например. с помощью отчета "Просмотр и анализ структуры базы данных (отчет на СКД)"), то увидим, что справочник "Организации" имеет имя таблицы "_REFERENCE230".


    Вот как-раз число в имени таблицы и является числовым идентификатором типа. Он может пригодиться в разборе нестандартных ошибок платформы или для анализа структуры базы.

    Что касается уникального идентификатора типа, то он также может пригодиться для диагностики сложных ситуация и ошибок. Например, ошибок вида "Неизвестный идентификатор типа <ЗначениеИдентфикатора> и другое. Это уже совсем другая история.

    В общем, информация дополнительная и может быть полезна в особых случаях.

    Вместо заключения

    Новый инструмент для специфических задач. Разве что получение уникального идентификатора ссылки дело обычное, но тоже используется не так часто.

    А Вы сможете найти применение данной обработке? :)

    23.08.20 - Добавлены доп. сведения о ссылках и небольшие улучшения

    • Добавлена дата создания ссылки (спасибо за идею Евгению Люлюк)
    • Добавлены идентификаторы ссылок для SQL Server и PostgreSQL (спасибо за идею Виталию Кислицину)
    • Исправлены названия некоторых доп. полей (спасибо за замечание kuzyara)
    • Обновлена версия обработки

    24.01.20 - Добавлена первая версия инструмента.

    Авторские разработки

    Транслятор запросов 1С в SQL - инструмент для трансляции запросов платформы 1С в SQL, а также их диагностики.

    Анализ производительности APDEX - отчет для просмотра и анализа замеров производительности в конфигурациях на базе БСП.

    Путеводитель по истории релизов - отчет по истории выпуска релизов продуктов фирмы "1С" и анализа информации по обновлениям.

    Просмотр и анализ структуры базы данных (отчет на СКД) - отчет для просмотра и анализа структуры базы данных с поддержкой файловых баз (ограниченный режим), а также баз на SQL Server и PostgreSQL.

    Просмотр и анализ журнала регистрации (отчет на СКД) - отчет на базе системы компоновки данных (СКД) для просмотра записей журнала регистрации.

    Обозреватель криптографии - отчет для просмотра доступных провайдеров и сертификатов криптографии на сервере и клиенте.

    Пакетная выгрузка / загрузка внешних отчетов и обработок - пакетная выгрузка / загрузка внешних отчетов и обработок для массовый манипуляций с ними.

    Командный интерпретатор для 1С - инструмент для выполнения команд CMD / PowerShell из 1С.

    Другие ссылки

    Специальные предложения

    Electronic Software Distribution

    Интеграция 1С с системой Меркурий

    Алкогольная декларация

    Готовые переносы данных

    54-ФЗ

    Управление проектом на Инфостарте

    Траектория обучения 1С-разработчика

    Хорошо
    Еще можно добавить дату создания (определяемую) по UID

    (2) Помимо даты там можно вытащить еще MAC адрес машины на которой была сгенерирована ссылка. Из пожеланий - открытие произвольной формы динамического списка объекта определенного типа, где одной из колонок была бы дата полученная из ссылки. Плюс к этому возможность автоматического открытия формы Журнала Регистрации с переданным отбором по этой дате и ссылке.
    Такой инструмент здорово облегчит проведение расследований, чтобы установить автора/создателя объекта в базе.

    Версионирование дело хорошее, но оно не всегда включено или настроено. И не всегда оправдано с точки зрения производительности.

    В качестве еще одного вариант добавления фишки - добавить на форму обработки события и переменные для работы с подключаемым оборудованием (БСП), чтобы отлаживать работу печатных форм на которых выводятся штрих-коды. У нас бывают ситуации, когда распечатанный документ есть, а в базе документа уже нет (помечают на удаление после распечатывания и подписи у руководителя). В таком случае как раз и приходится лезть в журнал регистрации для поиска того кто пометил документ на удаление. Если добавить функцию, которая будет получать штрих-код со сканера, определять дату по ссылке и делать снова отбор по ЖР, то это бы также облегчило проведение расследований.

    Читайте также: