Загадка возвращамого значения ЗначениеВСтрокуВнутр()

ЗначениеВСтрокуВнутр(Значение);
Из синтаксис помощника: Получает системное строковое представление переданного значения.

Что же такое "системное строковое представление"? точнее из чего оно состоит?

Функция ЗначениеВСтрокуВнутр(Значение) возвращает системное строковое представление в виде строки (пример):

{«#»,a86305d7-b8a1-4312-901f-2ade3efdb351,135:bc8b001ec9dd45d011dda3f1f556bd7a}

Для меня задача состояла в формировании данной строки на стороне НЕ 1с системы, но так чтобы 1с воспринимала сформированную строку как примерно свою. Поэтому первым моментом, и самым как оказалось трудным, стала расшифровка этой самой строки.

После поиска на просторах интернета попадая и на форум миста и на форум 1с получилась примерно следующая общая картина:

Расшифровка строки :               

{«#»,a86305d7-b8a1-4312-901f-2ade3efdb351,135:bc8b001ec9dd45d011dda3f1f556bd7a}

 

a86305d7-b8a1-4312-901f-2ade3efdb351 – это тип объекта 1с (например справочник организации в данном случае). Описание типов в каждой отдельной базе соответственно разное.

 

135:bc8b001ec9dd45d011dda3f1f556bd7a – UUID (Universally Unique Identifier), где

 

135 – это номер таблицы в sql базе или не в sql (для файлового режима) данных например _ReferenceN135 (в другой базе этот номер может быть другой, в разрезе баз они разные)

 

bc8b001ec9dd45d011dda3f1f556bd7a – перевернутый гуид объекта. (во вложении схема переворачивания). (процедуры прямого и обратного преобразования имеются в виде кода 1с, информация о преобразовании найдена здесь в виде публикации)

 

 

 

 

 

 

 

 

 

10 Comments

  1. Антон Ширяев

    Название у статьи заманчивое, но к сожалению тема практически не раскрыта. Рассмотрена только одна узкая область — преобразование строки в ссылку. Реально через ЗначениеВСтрокуВнутр() можно передавать очень много всего, а не только отдельные ссылки.

    Приведение строки вида 135:bc8b001ec9dd45d011dda3f1f556bd7a в строку вида {«#»,a86305d7-b8a1-4312-901f-2ade3efdb351,135:bc8b001ec9dd45d011dda3f1f556bd7a} я реализовывал в обработке Анализ и редактирование файлов журнала регистрации 1С 8.1/8.2 — ELF/LOG/LGF/LGP.

    Алгоритм там достаточно прост. Для получения идентификаторов типа (a86305d7-b8a1-4312-901f-2ade3efdb351) и номера (135) нужно пробежаться по всем метаданным и преобразовать через ЗначениеВСтрокуВнутр() пустые ссылки.

    Reply
  2. vitalya24

    (1) Антон Ширяев, ну за рамками прикладной задачи тема не рассматривалась, спасибо за дополнение:)

    Reply
  3. serpent

    Сори Загадка возвращаЕмого

    Reply
  4. DrAku1a

    Да… Тема не раскрыта… Это только верхушка айсберга!

    Вот например, Про быстрые массивы

    А преобразование в ссылку — это активно используется в обработках восстановления из разрушенного 1Cv8.1CD (тут таких полно).

    Reply
  5. mr.Kot

    Может быть тема раскрыта и не так глубоко, но, допустим, я хотел узнать только описанное в статье, целенаправленно стал искать и быстро нашёл, благодаря статье.

    Reply
  6. dyak84

    Автор как к человеку знающиму подскажи как правельней зделать в такой ситуации. Реквизит со значением неограничено преобразовываю при помощи функции ЗначениеВСтрокуВнутр() при обратном преобразовании при помощи функции ЗначениеИзСтрокиВнутр() приисходит ошибка формата потока. Подскажите как быть как можно решить етот вопрос. Зарание спасибо за ответ

    Reply
  7. nobuta

    (6) dyak84, у вас в клиент-серверном варианте такая ошибка возникает?

    Reply
  8. Diversus

    (0) А вот скажите, что дает 135? Критично будет ли следующее:

    Пусть значение ЗначениеВСтрокуВнутр дало нам строку вида: {«#»,4dcc257a-be68-4de0-bad6-a7dc42232078,135:8269998f2df8084a11e421234b28682d}

    Теперь мы возьмем и изменим строку на {«#»,4dcc257a-be68-4de0-bad6-a7dc42232078,0:8269998f2df8084a11e421234b28682d}

    и попытаемся сделать ЗначениеИзСтрокиВнутр с получившейся строкой.

    Результат так же правильно возвращает ссылку. В связи с этим вопрос что дает 135 — номер таблицы во внутренней структуре?

    Reply
  9. Diversus

    (0) И кстати да:

    Ссылка1=ЗначениеИзСтрокиВнутр(«{«»#»»,4dcc257a-be68-4de0-bad6-a7dc42232078,135:8269998f2df8084a11e421234b28682d}»);

    Ссылка2=ЗначениеИзСтрокиВнутр(«{«»#»»,4dcc257a-be68-4de0-bad6-a7dc42232078,0:8269998f2df8084a11e421234b28682d}»);

    Ссылка3=ЗначениеИзСтрокиВнутр(«{«»#»»,4dcc257a-be68-4de0-bad6-a7dc42232078,9999:8269998f2df8084a11e421234b28682d}»);

    Все три ссылки будут равны.

    Reply
  10. Xershi

    UUID на мобильной платформе смог получить, а вот номер объекта в таблице БД уже метод не доступен на мобильной платформе.

    Методов определения типов объекта 1с вообще не нашел!

    Выкрутился другим моментом, что эта фича и не понадобилась.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *