1с как получить уникальный идентификатор формы

Обновлено: 02.07.2024

Механизм уникальности форм

В платформе "1С:Предприятие 8" реализован механизм, позволяющий найти ранее созданный экземпляр формы. Поиск уже существующего экземпляра формы производится каждый раз при попытке получения формы. Контроль уникальности форм производится на основе анализа различных факторов. Состав данных факторов определяется расширением формы, зависящим от типа основного реквизита формы. Если же основной реквизит формы не установлен или имеет тип, для которого нет расширения формы, то уникальность экземпляров данной формы будет определяться значением владельца формы. Таким образом, в платформе реализована некая стратегия подбора экземпляра формы, зависящая от типа, редактируемого в форме значения.

Например: для расширения формы списка справочника при подборе формы проверяется владелец формы, далее анализируется признак режима выбора. Для расширения формы элемента справочника производится анализ экземпляра объекта, затем значение ссылки, если же получается форма нового элемента, то, дополнительно, осуществляется проверка признака ЭтоГруппа . Таким образом, получение формы элемента справочника путем вызова метода объекта приводит к получению экземпляра формы именно данного объекта. Вызов метода у ссылки приведет к получению формы элемента справочника, обладающего данной ссылкой (если в памяти имеется два экземпляра объекта с данным значением ссылки, то форма будет получена у одного из них, причем конкретный порядок выбора неопределен). Вследствие этого можно рекомендовать получать форму элемента справочника посредством вызова метода у ссылки, а не у объекта.

Однако в некоторых случаях необходимо получить новый экземпляр формы (вне зависимости от наличия существующих экземпляров) или же получить определенный экземпляр формы, созданный ранее. Для этих целей предназначен параметр <Ключ уникальности> различных методов получения формы ( ПолучитьФорму (), ПолучитьФормуВыбора() , ПолучитьФормуНовогоДокумента() и т.д.). Ключ уникальности выделяет экземпляр формы внутри подмножества экземпляров, определяемого стандартным механизмом уникальности форм.

Значением ключа может являться значение произвольного типа.

Например: если необходимо открывать различные экземпляры формы списка справочника сотрудников с установленным отбором по подразделению, то в качестве ключа уникальности (при открытии формы списка) можно передавать ссылку на подразделение, устанавливаемую в качестве отбора. Это позволит иметь различные экземпляры форм списка для различных подразделений и, одновременно, не открывать лишних форм списка для уже просматриваемых списков сотрудников подразделения.

Удобно в качестве ключа использовать значение типа УникальныйИдентификатор . Передача в качестве ключа нового значения данного типа - гарантирует получение нового экземпляра формы.

Эта обработка предназначена для наглядного представления работы
функции ПолучитьИдентификаторФормы() - получить идентификатор формы
диалога по передаваемому в кач-ве параметра групповому контексту
стандартными средствами языка 1с.

Идея основана на определении объекта метаданных - владельца формы диалога,
поиска реквизитов диалога в соответствии со свойствами объекта метаданных,
объединения их в общую строку, а затем ее сжатие с помощью словаря замены
наиболее часто употребляемых слов и словосочетаний в метаданных

В форме диалога обработки:

Формы диалога, по контексту которых возвращается не пустой идентификатор:

ФормаОперации
ФормаДокумента
ФормаПланаСчетов
ФормаСчета
ФормаСпискаСправочника
ФормаЭлементаИлиГруппыСправочника
ФормаЖурналаДокументов
ФормаЖурналаРасчетов
ФормаЖурналаОпераций
ФормаЖурналаПроводок
ФормаВнешнегоОтчета (идентификатор формируется по имени файла)

Процедура возвращает строковый идентификатор формы по переданному
групповому контексту формы (кроме форм отчетов и обработок, окна
истории значений).
Идентификатор формируется конкатенацией всех найденных
идентификаторов реквизитов формы, и последующим сжатием строки
без потери "качества".

Параметры:
<КонтекстФормы> передаваемый контекст формы
<СписокНайденныхРеквизитов> переменная типа СписокЗначений, сюда
функция вернет значения, - найденные идентификаторы реквизиты
формы из всех возможных, соответствующих ее свойствам или
свойствам открываемого объекта метаданных.
<ДополнительныйИДФормы> строка, постфикс к формируемому
возвращаемому значению
<СокрВариант> число, 1 или 0 (по умолчанию), -
полученный идентификатор сжать (=1) с применением словаря
наиболее употребимых слов/составных слов - идентификаторов
метаданных различных конфигураций.

для отчетов и обработок не работает.

Для форм из списка, которые не удалось открыть из-за настройки конфигурации
или ограничения прав доступа, получение идентификатора формы возможно за пределами
данной обработки, в модулях, где доступен контекст указанных форм. Для встраивания
в конфигурацию скопировать код между строками, содержащими "GETIDFORM" в глобальный
модуль.

Инструмент предназначен для получения расширенной информации о ссылочных значениях объектов информационной базы. Говоря простым языком - обработка позволяет получить уникальный идентификатор ссылки и еще расширенный набор информации. Вместе с такими инструментами как "Транслятор запросов 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 адрес машины на которой была сгенерирована ссылка. Из пожеланий - открытие произвольной формы динамического списка объекта определенного типа, где одной из колонок была бы дата полученная из ссылки. Плюс к этому возможность автоматического открытия формы Журнала Регистрации с переданным отбором по этой дате и ссылке.
    Такой инструмент здорово облегчит проведение расследований, чтобы установить автора/создателя объекта в базе.

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

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

    Инструмент предназначен для получения расширенной информации о ссылочных значениях объектов информационной базы. Говоря простым языком - обработка позволяет получить уникальный идентификатор ссылки и еще расширенный набор информации. Вместе с такими инструментами как "Транслятор запросов 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 адрес машины на которой была сгенерирована ссылка. Из пожеланий - открытие произвольной формы динамического списка объекта определенного типа, где одной из колонок была бы дата полученная из ссылки. Плюс к этому возможность автоматического открытия формы Журнала Регистрации с переданным отбором по этой дате и ссылке.
      Такой инструмент здорово облегчит проведение расследований, чтобы установить автора/создателя объекта в базе.

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

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

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