1с найтипоидентификатору как работает

Обновлено: 07.07.2024

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

Следует отметить, что свойство ТекущиеДанные содержит коллекцию значений текущей строки, соответствующую коллекции колонок отображаемого динамического списка, при этом если нужного поля нет в текущих данных, то его можно добавить в коллекцию полей списка используя метод Добавить() коллекции колонок списка.

Свойство ТекущиеДанные предназначено для получения значений колонок текущей строки, а свойство ТекущаяСтрока для получения и установки текущей строки табличного поля.

Следует понимать, что для объектных данных (Справочник, Документ и т.д.) в качестве значения свойства ТекущаяСтрока используется ссылка на объект базы данных. Соответственно при обращении к свойствам этого значения будет выполняться считывание объекта базы данных.

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

Рекомендуется для обращения к данным объекта использовать свойство ТекущиеДанные . Правильный фрагмент приведен ниже:

Если есть идентификатор текущей строки (т.е. свойство ТекущаяСтрока ), можно получить ТекущиеДанные . И наоборот:

Выполняет поиск элемента списка значений по идентификатору.

Синтаксис

Метод НайтиПоИдентификатору() имеет следующий синтаксис:

А также альтернативный англоязычный синтаксис:

Параметры

Описание параметров метода НайтиПоИдентификатору() :

Имя параметраТипОписание
ИдентификаторЧислоИдентификатор элемента списка значений.
Жирным шрифтом выделены обязательные параметры

Возвращаемое значение

Описание

Метод НайтиПоИдентификатору() выполняет поиск элемента списка значений по идентификатору. Если элемент с указанным идентификатором в списке отсутствует, будет возвращено значение Неопределено .

Доступность

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).

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

Пример кода с использованием метода НайтиПоИдентификатору() :

В табличных частях объектов 8.2 имеется возможность создавать реквизиты типа ХранилищеЗначения но сохранеие этих реквизитов в тонком клиенте отрабатывается некорректно, разве что каждый раз после присваивания вызывать метод записи объекта Записать () , что не очень то удобно использовать каждый раз при изменении отдельной строки. Для корректной работы с реквизитами такого типа предлагаю сохранять значения в соответствия, которое в свой черед помещается в реквизит формы типа ХранилищеЗначения. Ключом соответствия является идентификатор строки табличной части

УдалитьДанныеИзСоответствия ( ДанныеСтроки . НомерСтроки );
КонецПроцедуры

Хранилище = Новый ХранилищеЗначения ( Соответствие );
КонецПроцедуры

Соответствие = Хранилище . Получить ();
Соответствие . Вставить ( Индекс , Новый ХранилищеЗначения ( Файл ));
Хранилище = Новый ХранилищеЗначения ( Соответствие );

ЗначениеВРеквизитФормы ( СправочникОбъект , "Объект" );
КонецПроцедуры

Соответствие = Хранилище . Получить ();
Соответствие . Удалить ( ИндексТекущейСтроки );
Хранилище = Новый ХранилищеЗначения ( Соответствие );
КонецПроцедуры .

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

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

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

    Необходимо в табличной части формы добавить реквизит и чтобы в момент ПослеЗаписи этот реквизит там смог сохранится.
    Реквизит добавлен (булево) Имя: "РеквизитыИзменены" - этот параметр свидетельствует о том, что надо перезаписать элементы справочника именно измененных строк.
    Почему послеЗаписи - потому как сам документ который записуется должен войти в реквизит Элемента справочника каждой строки ТЧ. А поскольку документ В ПередЗаписью еще не записался то не можем передать туда ссылку на него. и еще куча других строк из документа уходят в справочник.

    Поэтому выбран метод послезаписи.

    В реквизиты формы добавляю Реквизит с типом произвольный СтрокиРеквизитыИзменены
    Перед записью запоминаю какие идентификаторы строк требуются.
    После записи проверяю эти идентификаторы и в таблице формы взвожу флаги.

    &НаКлиенте
    Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)

    // Сохранение списка требующих перезаписи объектов характеристики
    // поскольку метод ПослеЗаписи приводит к очистке реквизитов таблицы формы

    СтрокиРеквизитыИзменены = Новый Структура("ИдентификаторыСтрок", Новый Массив);
    МассивСтрок = Объект.Характеристики.НайтиСтроки(Новый Структура("РеквизитыИзменены", Истина));

    Для Каждого СтрокаТЧ Из МассивСтрок Цикл

    //Вызвана из процедуры ПоСлеЗаписиНаСервере

    &НаСервере
    Процедура ОбновитьРеквизитыХарактеристик()

    // Возобновление флагов
    Для каждого Индекс Из СтрокиРеквизитыИзменены.ИдентификаторыСтрок Цикл

    СтрокаТЧ = Объект.Характеристики.НайтиПоИдентификатору(Индекс);
    Если СтрокаТЧ = Неопределено Тогда
    Продолжить;
    КонецЕсли;

    А проблема странная. Работает но с одним дефектом:

    ВНИМАНИЕ! Тут реально важна последовательность:
    Если открыть форму (объект уже записан) и сделать сдвиг строки - Трындец не находит его идентификатора. Последующая перезапись все нормально сдвигай сколько угодно.

    Если открыть форму перезаписать (не сдвигая) все работает. Сдвигаешь - работает.

    Именно проблема в первом открытии - ссдвиг - Запись.

    (0) Дополню. Пробовал как угодно.

    Открыл форму - Запись, а потом сдвиг (проблема не проявлятся).

    и все проблема пропадает именно После первой записи. Можно сдвигать сколько угодно.
    Если открыть - Сдвинуть - Записать (проблема). Последующие сдвиги и перезаписи нет проблем.

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

    Как правило, объект описание типов 1С сам по себе нигде не используется, в основном он нужен в качестве параметра разных объектов, например, таблицы значений 1С. На примере таблицы значений и покажем, как работать с описанием типов. Описание типов можно создать только для одного типа, например, для типа Число будет следующее описание типа.

    Это примитивные типы, для ссылочных типов можно создать такое же описание, указав в двойных кавычках название типа.

    Чтобы получить быстро полное название нужной ссылки, можно воспользоваться контекстной подсказкой метода Тип.

    Описание типа 1С

    После того, как мы создали описание типов, этот объект можно использовать, например, при создании таблицы значений.

    Выше показано самое простое использование описания типов. Для числа, строки и даты мы можем использовать Квалификаторы. Это общие объекты – КвалификаторыЧисла, КвалификаторыСтроки, КвалификаторыДаты. Они также задаются при помощи конструктора Новый и имеют следующие синтаксисы.

    Квалификатор числа 1С

    Для числа будет следующий синтаксис квалификатора.

    Новый КвалификаторыЧисла(<ЧислоРазрядов>, <ЧислоРазрядовДробнойЧасти>, <ДопустимыйЗнак>)

    Где: ЧислоРазрядов – общее число разрядов;

    ЧислоРазрядовДробнойЧасти – число разрядов после запятой;

    ДопустимыйЗнак – системное перечисления (значения Любой, Неотрицательный).

    Например, задать неотрицательно число с 6 разрядами и 2 дробными разрядами будет так:

    Квалификатор строки 1С

    Для строки будет следующий синтаксис квалификатора.

    Новый КвалификаторыСтроки(<ДлинаСтроки>, <ДопустимаяДлина>)

    Где: ДлинаСтроки – длина задаваемой строки

    ДопустимаяДлина – системное перечисление ДопустимаяДлина, которое определяет, будет строка переменная или фиксированная.

    Например, задать строку длинной 10 символов фиксированной длины нужно так:

    Обратите внимание, что КвалификаторСтроки задаем третьим параметром.

    Квалификатор даты 1С

    Для даты будет следующий синтаксис квалификатора.

    Где ЧастиДаты – системное перечисление, с тремя значениями Время, Дата, ДатаВремя.

    Например, задать дату, которая будет иметь формат времени нужно так:

    Обратите внимание, что КвалификаторДаты задаем третьим параметром.

    Общий вариант синтаксиса с использование типов выглядит так:

    Новый ОписаниеТипов(<Типы>, <КвалификаторыЧисла>, <КвалификаторыСтроки>, <КвалификаторыДаты>, <КвалификаторыДвоичныхДанных>)

    Массив типов в описание типов

    Кроме использования одного типа в синтаксисе описания типов, можно использовать массив типов, например, сделаем колонку таблицы значений, у которая может принимать значения примитивных типов Строка, Число, Дата, Булево. Для этого нужно все типы перечислить в массиве, причём типы должны быть не в виде строк, как мы делали ранее, а в виде значений типа Тип.

    Также можно «собрать» массив из ссылочных типов, например из справочников:

    Описание типов на основании описания типов

    Выше был рассмотрен один вариант синтаксиса описания типов, на основания какого-то типа (или перечисления типов), но также можно создать описание типа на основании другого описания типов, т.е. дополнить имеющееся описание.

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

    Теперь нам нужно новое описание типов, в котором будут такие типы как Число, Строка и Дата (тип Булево нам не нужно).

    Для этого мы можем использовать следующий конструктор описания типов:

    Новый ОписаниеТипов(<ИсходноеОписаниеТипов>, <ДобавляемыеТипы>, <ВычитаемыеТипы>, <КвалификаторыЧисла>, <КвалификаторыСтроки>, <КвалификаторыДаты>, <КвалификаторыДвоичныхДанных>)

    Где, в качестве первого параметра указывается описание типов, на основании которого создается это описание, а в качестве второго и третьего параметра – добавляемые и вычитаемые типы (могут быть как в виде массивов, так и в виде строк).

    Давайте продолжим код выше:

    В этом код в новое описание типов, мы добавили тип Дата, и вычли тип Булево.



    Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

    1. Очень доступный и понятный язык изложения
    2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
    3. Поймете идеологию управляемого приложения 1С
    4. Узнаете, как разрабатывать управляемое приложение;
    5. Научитесь разрабатывать управляемые формы 1С;
    6. Сможете работать с основными и нужными элементами управляемых форм
    7. Программирование под управляемым приложением станет понятным


    Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

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