Помощник работы с идентификаторами объектов

Публикация № 1183874

Администрирование - Администрирование данных 1С - Поиск данных

идентификатор ссылка тип внутреннее устройство диагностика SQL Server PostgreSQL база данных

Инструмент для расширенного анализа идентификаторов объектов.

Назначение и возможности

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 
 Прямые запросы к базе

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

 
 Получение 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 - Добавлена первая версия инструмента.

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

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

Скачать файлы

Наименование Файл Версия Размер
Помощник работы с идентификаторами объектов:

.epf 19,76Kb
24.01.20
31
.epf 1.0.0.2 19,76Kb 31 Скачать

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Evg-Lylyk 3071 24.01.20 12:57 Сейчас в теме
Хорошо
Еще можно добавить дату создания (определяемую) по UID
A_Max; BigB; SirAlexIT; Fox-trot; YPermitin; +5 Ответить
2. YPermitin 9715 24.01.20 12:58 Сейчас в теме
(1) крутое предложение!

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

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

В качестве еще одного вариант добавления фишки - добавить на форму обработки события и переменные для работы с подключаемым оборудованием (БСП), чтобы отлаживать работу печатных форм на которых выводятся штрих-коды. У нас бывают ситуации, когда распечатанный документ есть, а в базе документа уже нет (помечают на удаление после распечатывания и подписи у руководителя). В таком случае как раз и приходится лезть в журнал регистрации для поиска того кто пометил документ на удаление. Если добавить функцию, которая будет получать штрих-код со сканера, определять дату по ссылке и делать снова отбор по ЖР, то это бы также облегчило проведение расследований.
A_Max; lunjio; BigB; acanta; VKislitsin; YPermitin; +6 Ответить
8. YPermitin 9715 24.01.20 18:35 Сейчас в теме
(6) содержательно.

Записал себе. Добавил issues, так сказать :)
3. acanta 24.01.20 14:50 Сейчас в теме
Фантастика. Спасибо огромное!
Правильно ли я понимаю, что идентификатор одного и того же объекта в sql и postgres разные и сконвертировать базу sql в postgres или наоборот не получится средствами СУБД, даже если они существуют, и поможет только выгрузка в dt, с соответствующим ограничением файловой системы на размер файла?
YPermitin; +1 Ответить
4. YPermitin 9715 24.01.20 15:32 Сейчас в теме
(3) идентификаторы в SQL Server и PostgreSQL одинаковые фактически, просто хранятся немного по разному.
Сконвертировать базу можно. Так даже делают, когда выгрузка / загрузка через DT не помогает. Но такая конвертация это совсем другая история.
5. Rustig 1558 24.01.20 16:07 Сейчас в теме
а где может пригодиться? так-то интересный инструмент...
YPermitin; +1 Ответить
7. YPermitin 9715 24.01.20 18:28 Сейчас в теме
(5) я описал где использую в публикации. Если кратко, то:
1. Поиск ссылок в базе по GUID (это либо идентификатор как в 1С, обычно такое при диагностике обменов пригождается. Либо это поиск ссылок по идентификатору SQL Server. Последнее пригождается, когда есть запрос и значение его параметров, но не понятно что это за значения).
2. Когда нужен GUID во время разработки.
3. Сложные случаи диагностики работы. С тем же типом данных как в статье.

В статье еще добавил ссылки на другие публикации получения GUID'ов. То есть 1 пункт чаще всего у разработчиков возникает.
10. Rustig 1558 24.01.20 19:10 Сейчас в теме
(7)
Поиск ссылок в базе по GUID

я извиняюсь, но я не вижу сам поиск.
поиск по данным /метаданным? по всей базе, по документам, по справочникам? по регистрам?
те же самые вопросы отнесу к запросам - есть значение, а где поиск происходит?
не вижу кнопки "Поиск" .... :)
11. YPermitin 9715 24.01.20 19:22 Сейчас в теме
(10) вводите GUID и он находит ссылочное значение. Ссылочное значение можно найти только в ссылочных объектах, так что регистры отпадают :)

Кнопки поиск не надо, ввели и обработка все показала. Смотрите анимацию в публикации :)
13. Rustig 1558 24.01.20 19:35 Сейчас в теме
(11) :) ясно, поиска не происходит... смутило слово "поиск"....
просто показывает соответствие конкретной ссылке - свой уид.
ок, спасибо, понятно, красиво сделано.
9. VKislitsin 24.01.20 19:04 Сейчас в теме
Юрий, и снова радуете отличным инструментом!
Особенно меня порадовал (и как же я сам не догадался так сделать-то...) поиск ссылочных значений имея только уникальный идентификатор или значение из СУБД, без обозначения типа объекта. В похожей обработке мне приходилось тип объекта определять по его номеру. Ваш вариант с перебором менеджеров гораздо удобнее!
12. YPermitin 9715 24.01.20 19:23 Сейчас в теме
(9) спасибо!

Рад, что принес пользу :)
14. triviumfan 22 24.01.20 21:07 Сейчас в теме
Вроде ничего нового, но все в одной обработке. Наверное удобно.
Как уид перечисления ищется? ЗначениеВСтрокуВнутр()?
ЗЫ: дороговато для такой простенькой обработки
BigB; YPermitin; +2 Ответить
15. YPermitin 9715 24.01.20 21:09 Сейчас в теме
(14) никто не заставляет вас скачивать :)
16. triviumfan 22 24.01.20 22:23 Сейчас в теме
(15)
Как уид перечисления ищется? ЗначениеВСтрокуВнутр()?
17. Xershi 1020 25.01.20 10:08 Сейчас в теме
Уже давно есть инструмент как для поиска, так и для восстановления Поиск и восстановление битых ссылок (обычная и управляемая форма) 8.2-8.3.
Ну и как вы поняли нет ограничений на платформу и режим запуска.
YPermitin; +1 Ответить
18. YPermitin 9715 25.01.20 10:23 Сейчас в теме
(17) ох уж эта реклама в комментариях. Давно есть, а функционал то другой.
19. PLAstic 258 27.01.20 09:23 Сейчас в теме
(18) Я, может, тоже не туда посмотрел, но почему "другой"? Всё то же есть вроде бы.
YPermitin; +1 Ответить
20. YPermitin 9715 27.01.20 10:23 Сейчас в теме
(19) поиск по идентификаторам СУБД SQL Server и PostgreSQL, инфо о навигационной ссылке, идентификаторы перечислений, идентификаторы типов.

Ну то есть задача у того инструмента другая вроде как.
21. kuzyara 1058 31.01.20 11:32 Сейчас в теме
У вас в обработке выводится "Идентификатор типа".
Хотя на самом деле это идентификатор типа ссылки.
Например, после создания нового справочника Номенклатура, становятся доступны следующие типы данных:
СправочникМенеджер.Номенклатура;
СправочникСсылка.Номенклатура;
СправочникОбъект.Номенклатура;
СправочникВыборка.Номенклатура;
СправочникСписок.Номенклатура.
(с) https://v8.1c.ru/platforma/sistema-tipov/

Таким образом для одного объекта метаданных вида справочник определяется 5 типов.

Для константы 2 типа:
КонстантаМенеджер.<Имя константы>
КонстантаМенеджерЗначения.<Имя константы>


Для регистра расчёта 6 типов:
РегистрРасчетаМенеджер.<Имя регистра расчета>
РегистрРасчетаНаборЗаписей.<Имя регистра расчета>
РегистрРасчетаВыборка.<Имя регистра расчета>
РегистрРасчетаЗапись.<Имя регистра расчета>
РегистрРасчетаКлючЗаписи.<Имя регистра расчета>
РегистрРасчетаСписок.<Имя регистра расчета>


В данной обработке "идентификтор типа" определяется через ЗначениеВСтрокуВнутр(СсылкаНаОбъект) что является эквивалентом ЗначениеВСтрокуВнутр(ТипЗнч(СсылкаНаОбъект)) или ЗначениеВСтрокуВнутр(Тип("СправочникСсылка.Организации"))(судя по первому скрину), то есть и там и там и там первым будет идти идентификатор типа ссылки.
Пример:
СсылкаНаОбъект = Справочники.Организации.НайтиПоНаименованию("");
// для ссылки
Строка1 = ЗначениеВСтрокуВнутр(Тип("СправочникСсылка.Организации"));// {"T",0e283f00-16f5-4700-b0f6-5206e4fefcf3}
Строка2 = ЗначениеВСтрокуВнутр(ТипЗнч(СсылкаНаОбъект));             // {"T",0e283f00-16f5-4700-b0f6-5206e4fefcf3}
Строка3 = ЗначениеВСтрокуВнутр(СсылкаНаОбъект);                     // {"#",0e283f00-16f5-4700-b0f6-5206e4fefcf3,65:a19abcaec539291a11ea44007b879c3d}
// для объекта
Строка4 = ЗначениеВСтрокуВнутр(Тип("СправочникОбъект.Организации"));     // {"T",0de1dfa4-0add-4e01-8f3c-aad080c6b1f3}
Строка5 = ЗначениеВСтрокуВнутр(ТипЗнч(СсылкаНаОбъект.ПолучитьОбъект())); // {"T",0de1dfa4-0add-4e01-8f3c-aad080c6b1f3}
// для выборки
Строка6 = ЗначениеВСтрокуВнутр(Тип("СправочникВыборка.Организации"));     // {"T",6f64dca0-a3c7-48ff-ac3e-b470c7ec9c71}
Строка7 = ЗначениеВСтрокуВнутр(ТипЗнч(Справочники.Организации.Выбрать()));// {"T",6f64dca0-a3c7-48ff-ac3e-b470c7ec9c71}
// и т.д.
Показать

Идентификатор же объекта метаданных программно получить нельзя, только выгрузкой конфигурации в файлы (поле uuid), например вот файл Организации.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Met aDataObject xmlns="http://v8.1c.ru/8.3/MDClasses">
	<Catalog uuid="b3f7df39-dc92-457a-8604-eb57b6a7a403">
		<InternalInfo>
			<xr:GeneratedType name="CatalogObject.Организации" category="Object">
				<xr:TypeId>0de1dfa4-0add-4e01-8f3c-aad080c6b1f3</xr:TypeId>
				<xr:ValueId>6e7e462d-c48f-479c-bd15-38f2df11a8d3</xr:ValueId>
			</xr:GeneratedType>
			<xr:GeneratedType name="CatalogRef.Организации" category="Ref">
				<xr:TypeId>0e283f00-16f5-4700-b0f6-5206e4fefcf3</xr:TypeId>
				<xr:ValueId>ec7587ff-5deb-40d5-8155-f73f1623f9b6</xr:ValueId>
			</xr:GeneratedType>
			<xr:GeneratedType name="CatalogSelection.Организации" category="Selection">
				<xr:TypeId>6f64dca0-a3c7-48ff-ac3e-b470c7ec9c71</xr:TypeId>
				<xr:ValueId>89e18e38-ccfb-483a-b74d-efe11d5a34fb</xr:ValueId>
			</xr:GeneratedType>
			<xr:GeneratedType name="CatalogList.Организации" category="List">
				<xr:TypeId>1e0465a8-a6c3-42ad-809d-5d4cf7e4e9a4</xr:TypeId>
				<xr:ValueId>468436d7-7488-453d-ba93-d8f64f6557b1</xr:ValueId>
			</xr:GeneratedType>
			<xr:GeneratedType name="CatalogManager.Организации" category="Manager">
				<xr:TypeId>3911ed42-c1e2-45cf-908e-9ca0cbc280a4</xr:TypeId>
				<xr:ValueId>c170b256-4b17-461c-ac53-15ba90593580</xr:ValueId>
			</xr:GeneratedType>
		</InternalInfo>
Показать

Или из буфера обмена (см. скриншот)

Таким образом, надпись "Идентификатор типа" считаю не совсем корректной и: либо добавить в обработку выбор из полного списка прикладных типов объекта; либо всё же указать что это идентификатор типа ссылки

ps: я знаю что вы уже всё это знаете, просто хочу поделиться информацией. Извините за многословность ;)
Прикрепленные файлы:
YPermitin; +1 Ответить
22. YPermitin 9715 31.01.20 11:43 Сейчас в теме
(21) это отличный комментарий!

Да, все так, это идентификатор типа ссылки :)

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

+ Вам, добрый человек! :)
27. VKislitsin 507 03.08.20 10:44 Сейчас в теме
(22)
Переименую поле в следующей версии

Юрий, для следующей версии еще одну доработку предлагаю: числовой идентификатор типа дополнить шестнадцатеричным представлением в СУБД - для использования в запросах по полям составных типов.
Прикрепленные файлы:
YPermitin; +1 Ответить
28. YPermitin 9715 03.08.20 10:58 Сейчас в теме
(27) классная идея, записал.
23. Yashazz 3419 26.06.20 09:37 Сейчас в теме
Несколько позабавило, что в статье упомянуты относительно недавние публикации 2018-19 гг., которые и сами по себе баяны.
Если покопаться, то всё это "изобретено ещё ледникового периода", например http://infostart.dexcel.ru/public/99109/ или https://infostart.ru/public/99334/ или даже моя минутная поделочка https://infostart.ru/public/124782/ (которая интересна тем, что уже и там правильно сказали, что сие баян).

Это не умаляет полезности данной разработки (особенно в части прямого обращения к скулю, что нарушает лицензионное соглашение 1С), но вот новизны - упс.
YPermitin; +1 Ответить
24. YPermitin 9715 26.06.20 09:41 Сейчас в теме
(23) спасибо, яркий человек :)

Очень полезное замечание. Постараюсь учесть в дальнейшем :)))
25. Yashazz 3419 26.06.20 10:24 Сейчас в теме
(24) Ещё советую глянуть комменты в http://infostart.dexcel.ru/public/83378/ там есть полезности
YPermitin; +1 Ответить
26. koln 15.07.20 08:57 Сейчас в теме
А формы по УИДу можно получить?
29. YPermitin 9715 28.08.20 14:58 Сейчас в теме
(26) немного не понятно зачем это. Наверное можно, но это уже другая тема.
Оставьте свое сообщение

См. также

daСклонение: склонение ФИО, должностей, чисел, прилагательных, существительных на языке 1С + ТестЦентр Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

Функция предназначена для склонения выражений, которые часто требуется при формировании печатных форм договоров и прочих печатных форм. Функция склоняет по падежам ФИО, должности, числительные, валюты, единицы измерения, предметы. Также функция склоняет глаголы и прилагательные по числам и родам и существительные по числам. Имеется режим определения рода переданного выражения. Поддержка форматной строки для вывода результата. Функция не использует внешние библиотеки и веб-сервисы, написана на чистом языке 1С, и поэтому легко встраивается в любую конфигурацию или внешнюю обработку. Правила склонения оформлены в виде таблицы и могут быть легко изменены при необходимости.

1 стартмани

14.02.2015    103607    98    daMaster    90    

Сравнение реального дохода со средним доходом из API.HH.RU

Зарплата Управленческие v8 v8::СПР ЗУП3.x УУ Абонемент ($m)

Внешняя обработка на управляемой форме для 1С:Предприятие 8.3 по интеграции с HH.RU используя HH REST API. Ключевые функции: получение списка вакансий по должностям (Ключ для работы не нужен); расчет среднего дохода; Тестирование проводилось на платформе 1С:Предприятие 8.3 (8.3.13.1513) Зарплата и управление персоналом, редакция 3.1 (3.1.11.68) совместно с API.HH.RU.

1 стартмани

11.11.2019    4179    5    solaru    2    

Конфигурация для рекламного агентства

Управление услугами и сервисом Управление взаимоотношениями с клиентами (СRM) Производство готовой продукции (работ, услуг) Управление взаимоотношениями с клиентами (СRM) Производство готовой продукции (работ, услуг) v8 Реклама, PR и маркетинг УУ Абонемент ($m)

Данная конфигурация выполнена для решения тестового задания: Цель задания: 1) Понять, на каком из клиентов сколько мы заработали;  2) Понять, по какому виду СМИ сколько мы заработали;  3) Проследить по каждой услуге: у кого за сколько купили и кому за сколько продали, с возможностью перейти в соответствующий документ. Реализовано с помощью: 1. Справочники - контрагенты, номенклатура 2. Документы - Поступление услуг, реализация услуг 3. Отчеты - отчет по контрагентам, номенклатуре и движений.

1 стартмани

21.05.2019    5015    0    solaru    0    

Загрузка номенклатуры в УТ 10.3 из Excel файла с генерацией штрихкодов

Загрузка и выгрузка в Excel Обработка справочников Оптовая торговля Розничная торговля Учет ТМЦ Оптовая торговля Розничная торговля Учет ТМЦ v8 УТ10 Россия Абонемент ($m)

Обработка позволяет генерировать новые номенклатурные позиции на основе данных из файла Excel с последующей генерацией штрихкодов (ШК). Может быть полезна при больших поступлениях товаров на склад, где ручное создание и присваивание штрихкода  (ШК) может занимать много времени.

1 стартмани

24.03.2017    8050    7    solaru    0    

Под капотом управляемых форм

Практика программирования v8 1cv8.cf Бесплатно (free)

Управляемые формы уже давно и плотно вошли в жизнь 1С-разработчика. Однако, судя по недавним публикациям на Инфостарте, многие до сих пор мало знакомы с ними. Предлагаю разобраться с тем, что же это такое.

26.08.2013    268364    Evil Beaver    271    

[NotaBene] Универсальный отчет по таблице значений

Практика программирования v7.7 1cv7.md Россия Абонемент ($m)

1C v.7.7 Готовое решение. Не требует настройки. Не требует допрограммирования. Данная обработка решает часто встречающуюся задачу вывода в "красивом" виде таблицы значений (полученной, например, из запроса). Поддерживается произвольное группирование данных, отключение/включение группировок, в т.ч и создание "шахматок" (типа "продажи понедельно"). Обработка может использоваться как и в отладочных целях (для нормального просмотра ТЗ), так и в составе вполне рабочих отчетов. По крайней мере, я неоднократно клиентам данную обработку ставил вместо того, чтобы каждый раз писать замороченные выводы данных. И клиенты довольны, и мне - проще...

2 стартмани

07.05.2007    29245    3    CheBurator    63