Как получить код объекта 1с

Обновлено: 02.07.2024

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

Как получить уникальный идентификатор из ссылки? При помощи свойства ссылки УникальныйИдентификатор(). Пример 1:

Уникальный идентификатор в 1С 8 имеет тип УникальныйИдентификатор, но его можно преобразовать и в строковое значение(получится строка вот такого вида: 9712e912-d0b9-11e1-b37b-0050568458ce).

Как получить ссылку имея уникальный идентификатор? При помощи метода ПолучитьСсылку( ) менеджера справочника, документа и т.п.

Пример 4 (Здесь УИН — значение типа УникальныйИдентификатор):

Пример 5(Здесь СтрокаУИН — переменная со строковым значением уникального идентификатора):

В примере 5 уникальный идентификатор получается из строкового значения при помощи конструктора Новый УникальныйИдентификатор( )

Для получения уникального идентификатора объекта, используйте код вида:
Код 1C v 8.х

Как с помощью запроса получить уникальный идентификатор:
Код 1C v 8.х

В 1С 7.7 можно получить так

Через v7plus.dll
Код 1C v 7.x

Через WScript
Код 1C v 7.x

при OLE доступе:
Код 1C v 7.x

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

Как получить уникальный идентификатор из ссылки? При помощи свойства ссылки УникальныйИдентификатор().
Пример 1:

Уникальный идентификатор в 1С 8 имеет тип УникальныйИдентификатор, но его можно преобразовать и в строковое значение(получится строка вот такого вида: 9712e912-d0b9-11e1-b37b-0050568458ce).

Как получить ссылку имея уникальный идентификатор? При помощи метода ПолучитьСсылку( ) менеджера справочника, документа и т.п.

Номенклатура = Справочники . Номенклатура . ПолучитьСсылку ( УИН ) ;

Номенклатура = Справочники . Номенклатура . ПолучитьСсылку ( Новый УникальныйИдентификатор ( СтрокаУИН ) ) ;

В примере 5 уникальный идентификатор получается из строкового значения при помощи конструктора Новый УникальныйИдентификатор( )

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

Задача: Описать функции позволяющие получить значения реквизитов различных объектов (независимо от типа объекта). Но ограничимся объектами метаданных конфигурации, которые могут иметь ссылочный тип данных: Справочники, Документы и т.п.

Описанные далее функции желательно располагать в общем серверном модуле без возможности вызова сервера. Если будет возможность вызывать данные функции с клиента, то злоумышленник сможет получить любые данные из базы без особого труда.

Определимся с параметрами:

  1. Объект - объект, данные которого необходимо получить;
  2. ИменаРеквизитов - Список имен реквизитов, данные которых необходимо получить. Если спиок не указан, то предполагаем, что нужно получить данные всех реквизитов;
  3. ДополнительныеРеквизиты - Структура, с помошью которой можно было бы описать дополнительные данные, которые нужно получить вместе с реквизитами объекта (без использования явных соединений с другими таблицами) или выполнение каких-то действий с полями выборки на языке запросов. В ключе элемента структуры описываем имя реквизита в общем списке реквизитов объекта, в значении - поле выборки или алгоритм обработки полей выборки на языке запросов.

Функция ДанныеРеквизитовОбъекта ( Объект , ИменаРеквизитов = Неопределено,
ДополнительныеРеквизиты = Неопределено) Экспорт

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

СтруктураОбъекта = Новый Структура ;
МетаданныеОбъекта = Объект . Метаданные ();

Если ИменаРеквизитов = Неопределено тогда
МассивИменРеквизитов = МассивИменРеквизитовОбъекта ( Объект );
иначе
Если ТипЗнч ( ИменаРеквизитов ) = Тип ( "Массив" ) тогда
МассивИменРеквизитов = ИменаРеквизитов ;
иначеЕсли ТипЗнч ( ИменаРеквизитов ) = Тип ( "Строка" ) тогда
МассивИменРеквизитов = МассивПодстрокИзСтроки ( ИменаРеквизитов );
КонецЕсли;
КонецЕсли;

Если список имен не задан, то с помощью функции МассивИменРеквизитовОбъекта () получим массив имен всех реквизитов объекта (алгоритм этой функции смотри ниже).

Если список имен задан в виде строки разделенной запятыми, то разложим ее на подстроки с помошью функции МассивПодстрокИзСтроки () . Это не сложная задача, алгоритм этой функции разбирать не будем.

Далее с помошью функции ЭтоСсылка () определим, является ли объект ссылочным типом. Для ссылочных типов значения необходимо получить из БД, в противном случае значения реквизитов хранятся в памяти.

ЭтоСсылка = ЭтоСсылка ( Объект );
СсылкаОбъекта = ?( ЭтоСсылка , Объект , Объект . Ссылка );

ПолучитьДанныеИзОбъекта = НЕ ЭтоСсылка ;
Если ЭтоСсылка И СсылкаОбъекта . Пустая () тогда
// это пустая ссылка (данных в базе нет)
ПолучитьДанныеИзОбъекта = Истина;
КонецЕсли;

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

ОсновныеРеквизиты = Новый Структура ;
Для каждого ИмяРеквизита Из МассивИменРеквизитов Цикл
Если ПолучитьДанныеИзОбъекта тогда
СтруктураОбъекта . Вставить ( ИмяРеквизита , Объект [ ИмяРеквизита ]);
иначе
ОсновныеРеквизиты . Вставить ( ИмяРеквизита );
КонецЕсли;
КонецЦикла;

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

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

Если НЕ СсылкаОбъекта . Пустая () тогда

// сформируем текст выборки по реквизитам
ТекстВыборкиРеквизиты = "" ;
Для индекс = 0 по 1 Цикл
СтруктураРеквизитов = ?( индекс = 0 , ОсновныеРеквизиты , ДополнительныеРеквизиты );
Если СтруктураРеквизитов = Неопределено тогда
Продолжить;
КонецЕсли;
Для каждого ЭлементСтруктуры из СтруктураРеквизитов Цикл
Если НЕ МетаданныеОбъекта . ТабличныеЧасти . Найти ( ЭлементСтруктуры . Ключ ) = Неопределено тогда
// это имя табличной части
Продолжить;
КонецЕсли;
ТекстВыборкиРеквизиты = ТекстВыборкиРеквизиты
+ ?( ПустаяСтрока ( ТекстВыборкиРеквизиты ), "" , "," + Символы . ПС )
+ ?( ЗначениеЗаполнено ( ЭлементСтруктуры . Значение ), ЭлементСтруктуры . Значение , ЭлементСтруктуры . Ключ )
+ " КАК " + ЭлементСтруктуры . Ключ ;
КонецЦикла;
КонецЦикла;

Теперь соберем текст запроса и выполним его. Результат запроса добавим в общую структуру данных объекта

// получим реквизиты одним запросом
Если НЕ ПустаяСтрока ( ТекстВыборкиРеквизиты ) тогда
Запрос = Новый Запрос ;
Запрос . Текст = "ВЫБРАТЬ
|" + ТекстВыборкиРеквизиты + "
|ИЗ
| " + МетаданныеОбъекта . ПолноеИмя () + "
|ГДЕ
| Ссылка = &Ссылка" ;
Запрос . УстановитьПараметр ( "Ссылка" , СсылкаОбъекта );
РезультатЗапроса = Запрос . Выполнить ();
Выборка = РезультатЗапроса . Выбрать ();
Если Выборка . Следующий () тогда
Для каждого Колонка из РезультатЗапроса . Колонки Цикл
СтруктураОбъекта . Вставить ( Колонка . Имя , Выборка [ Колонка . Имя ]);
КонецЦикла;
КонецЕсли;
КонецЕсли;

Все данные получены, можно завершать функцию

Достоинства алгоритма:

  1. Может работать с различными типами объектов конфигурации (которые могут иметь ссылки: Справочники, Документы, ПВХ и т.п.);
  2. Получение всех реквизитов за одно обращение к БД;
  3. Данные возвращаются в виде структуры, что позволяет их передать далее на клиент без преобразования;
  4. С помошью Дополнительных реквизитов можно получить вспомогательные данные (обращение к полям выборки через несколько точек) или на уровне запроса выполнить какие-то действия с данными.
  5. Наглядность кода, данные получаются одной функцией, без надобности каждый раз писать запрос к БД с обработкой результата.

Недостатки:

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

Дополнительные функции использованные в алгоритме:

// Возвращает массив имен всех реквизитов переданного объекта
//
Функция МассивИменРеквизитовОбъекта ( Объект ) Экспорт

МассивИменРеквизитов = Новый Массив ;

Если ТипЗнч ( Объект ) = Тип ( "ОбъектМетаданных" ) тогда
МетаданныеОбъекта = Объект ;
иначе
МетаданныеОбъекта = Метаданные . НайтиПоТипу ( ТипЗнч ( Объект ));
Если МетаданныеОбъекта = Неопределено тогда
Возврат МассивИменРеквизитов ;
КонецЕсли;
КонецЕсли;

Для индекс = 0 по 1 Цикл
КоллекцияРеквизитов = ?( индекс = 0 , МетаданныеОбъекта . СтандартныеРеквизиты , МетаданныеОбъекта . Реквизиты );
Для Каждого Реквизит Из КоллекцияРеквизитов Цикл
МассивИменРеквизитов . Добавить ( Реквизит . Имя );
КонецЦикла;
КонецЦикла;
Для каждого ОбщийРеквизит Из Метаданные . ОбщиеРеквизиты Цикл
Если ИспользуетсяОбщийРеквизит ( ОбщийРеквизит , МетаданныеОбъекта ) тогда
МассивИменРеквизитов . Добавить ( ОбщийРеквизит . Имя );
КонецЕсли;
КонецЦикла;

// Проверяет используется ли в Объекте указанный общий реквизит
//
Функция ИспользуетсяОбщийРеквизит ( ОбщийРеквизит , Объект ) Экспорт

Если ТипЗнч ( Объект ) = Тип ( "ОбъектМетаданных" ) тогда
МетаданныеОбъекта = Объект ;
иначе
МетаданныеОбъекта = Метаданные . НайтиПоТипу ( ТипЗнч ( Объект ));
Если МетаданныеОбъекта = Неопределено тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;

Если ТипЗнч ( ОбщийРеквизит ) = Тип ( "ОбъектМетаданных" ) тогда
МетаданныеОбщегоРеквизита = ОбщийРеквизит ;
иначе
МетаданныеОбщегоРеквизита = Метаданные . ОбщиеРеквизиты . Найти ( ОбщийРеквизит );
Если МетаданныеОбщегоРеквизита = Неопределено тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;

ЭлементСостава = МетаданныеОбщегоРеквизита . Состав . Найти ( МетаданныеОбъекта );
Если ЭлементСостава = Неопределено тогда
Возврат Ложь;
КонецЕсли;

пИспользованиеОбщегоРеквизита = Метаданные . СвойстваОбъектов . ИспользованиеОбщегоРеквизита ;
Если ЭлементСостава . Использование = пИспользованиеОбщегоРеквизита . Использовать тогда
Возврат Истина;
иначеЕсли ЭлементСостава . Использование = пИспользованиеОбщегоРеквизита . НеИспользовать тогда
Возврат Ложь;
иначе
пАвтоИспользованиеОбщегоРеквизита = Метаданные . СвойстваОбъектов . АвтоИспользованиеОбщегоРеквизита ;
Если МетаданныеОбщегоРеквизита . АвтоИспользование = пАвтоИспользованиеОбщегоРеквизита . Использовать тогда
Возврат Истина;
иначе
Возврат Ложь;
КонецЕсли;
КонецЕсли;

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

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

    Мы помним, что в платформе 1С 8.3. существуют три вида объектов. Это объекты метаданных, общие объекты и универсальные коллекции значений.

    Так вот, ссылка может быть только у объектов метаданных.

    Замечу что, ссылка указывает не на сам объект, а на экземпляр объекта. Хотя, очень часто употребляют выражения «ссылка объекта», «ссылка на объект» и т.п.

    Все ссылки объектов имеют тип СправочникСсылка.<НазваниеОбъекта>, ДокументСсылка.<НазваниеОбъекта> и т.д.

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

    Например, в моей конфигурации есть справочник Контрагенты.

    Справочник в конфигурации 1С

    Ссылка на справочник у реквизита документа 1С

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

    Ссылка на справочник у реквизита документа 1С

    Если мы используем ссылку в качестве реквизита какого-то объекта, то при редактировании экземпляра, на который указывает ссылка, сам реквизит не изменится.

    Поясню на примере. Я выше создал документ Оплата и реквизит Оплативший для этого документа с типом СправочникСсылка.Контрагенты.

    Если я переименую элемент справочника Контрагенты.

    Элемент справочника 1С

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

    Документ 1С

    Что это значит? Это не значит, что реквизит Оплативший элемента и сам элемент справочника Номенклатура поменялся автоматически. Нет, это значит, что данный реквизит хранит указатель на экземпляр объекта, который отображается посредством наименования. Поменяли наименование, поменялось только отображение, если бы поменяли какой-нибудь другой реквизит справочника Контрагенты, то пользователь бы ничего не заметил.

    Получить ссылку 1С

    Каким образом программно получить ссылку на экземпляр объекта, который уже есть в базе?

    Сделать это можно несколькими способами: найти по коду, найти по наименованию, найти по реквизиту и найти по нескольким реквизитам через запрос. Я рассмотрю первые два метода.

    Для демонстрации этих методов, на основной форме документа Оплата я создам команду «Установить контрагента», которую размещу в командной панели формы.

    Команда основной формы 1С

    При выполнении этой команды я буду в поле Оплативший записывать определенного контрагента. Для этого я создам обработчики команды на клиенте и на сервере.

    Обработчики команды 1С

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

    Функция НайтиПоКоду вернёт ссылку на экземпляр объекта справочник Контрагенты, которому соответствует код 000000002. Почему мы задали код в виде строки, а не в виде цифры, например? Чтобы понять это, нужно открыть непосредственно редактор справочника Контрагенты в конфигураторе, перейти на закладку «Данные» и посмотреть, какой тип кода у этого справочника.

    Тип кода справочника 1С

    Таким образом, данный код:

    Рассмотрим синтаксис этой функции для менеджера справочника:

    НайтиПоКоду(<Код>,<ПоискПоПолномуКоду>,<Родитель>,<Владелец>)

    Код – непосредственно тот код, по которому мы ищем наш элемент;

    Данное поле необязательно, по умолчанию – Ложь;

    Родитель – для иерархических справочников можно указать группу, тогда поиск будет вестись внутри группы. Данное поле необязательно;

    Владелец – для подчиненных справочников можно указать владельца, тогда поиск будет вестись только среди элементов, подчиненных данному владельцу. Данное поле необязательно.

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

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

    Например, у справочников этот реквизит имеется.

    Стандартный реквизит Наименование справочника 1С

    А у документов его нет.

    Отсутствие стандартного реквизита Наименование документа 1С

    В случае этой функции, поиск ведется по тому значению, которое в поле Наименование объекта

    Синтаксис функции для менеджера справочника следующий:

    НайтиПоНаименованию(<Наименование>,<ТочноеСоответствие>,<Родитель>,<Владелец>)

    «Наименование» – непосредственно то наименование, по которому мы ищем наш элемент;

    Данное поле необязательно, по умолчанию – Ложь.

    Помните это, что по умолчанию поиск ведется не точно;

    Параметры «Родитель» и «Владелец» точно такие же, как для процедуры НайтиПоКоду.

    Пустая ссылка 1С

    Выглядит он так:

    ПустаяНоменклатура= Справочники.Номенклатура.ПустаяСсылка();

    ПустаяОплата = Документы.Оплата.ПустаяСсылка();

    Переменные ПустаяНоменклатура и ПустаяОплата содержат в себе пустые ссылки на каждый объект.

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

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

    Метод Пустая() удобно использовать работая в клиентском контексте (в том числе на тонком клиенте), потому что менеджер объекта это «тяжелый» объекта и с ним можно работать только в серверном контексте. Т.е. установку контрагента можно сделать таким способом:

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

    Пустая ссылка в 1С

    Программировать в 1С за 11 шагов

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

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

    Основы разработки в 1С такси

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

    Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
    Только для читателей моего блога,
    промо-код на скидку в 300 рублей на весь комплект: blog


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

    можно оплатить вручную:

    Вариант 1: ОкноКлиентскогоПриложения (ClientApplicationWindow)
    ПолучитьНавигационнуюСсылку (GetURL)
    Синтаксис:
    Код 1C v 8.х
    Возвращаемое значение:
    Тип: Строка.
    Описание: Получает навигационную ссылку в формате 1С:Предприятия на текущую форму.
    Доступность: Тонкий клиент, веб-клиент, толстый клиент, внешнее соединение.

    Вариант 2: Глобальный контекст (Global context)
    ПолучитьНавигационнуюСсылку (GetURL)
    Синтаксис:
    Код 1C v 8.х
    Параметры: <Объект> (обязательный)
    Тип: Ссылка на объект информационной базы. Ссылка на объект. <ИмяРеквизита> (необязательный)
    Тип: Строка. Имя реквизита объекта или ресурса Регистра сведений, для которого нужно выяснить ссылку. Если это реквизит табличной части объекта, то параметр указывается как <имя табличной части>.<имя реквизита>, то есть с разделителем "." (точка).
    <Индекс> (необязательный)
    Тип: Число. Индекс строки в табличной части, в том случае если объект является реквизитом табличной части. Первая строка имеет индекс равный 0.
    Возвращаемое значение: Тип: Строка.
    Описание: Получает текст ссылки на объект информационной базы или его реквизит в формате 1С:Предприятия.
    В первом случае принимает в качестве параметра ссылку на объект (это может быть как ссылка, так и ключ записи регистра сведений). Объектом могут быть: справочник, документ, ключ записи регистра сведений, бизнес процессы, задачи.
    Во втором, в качестве параметров принимает ключ объекта (это может быть как ссылка, так и ключ записи регистра сведений) и имя реквизита (ресурса). Если нужно получить ссылку на реквизит табличной части, перед именем реквизита необходимо добавить имя табличной части и точку ".".
    Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
    Примечание: Выполняет обращение к серверу только при получении ссылки на реквизит. При получении ссылки на объект информационной базы запрос на сервер не выполняется.
    Код 1C v 8.2 УП

    Получить навигационную ссылку для константы?
    Вопрос: В конфигурации есть константа с типом ХранилищеЗначения для хранения изображения. Пытаюсь реализовать Загрузку и Выгрузку изображения: СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(Константы.Логотип.Получить());
    где СсылкаНаКартинку - реквизит формы с типом строка, а на форме есть элемент, у которого путь к данным = СсылкаНаКартинку
    Возможно ли реализовать отображение картинки таким образом, или стоит хранить картинку где-либо еще?
    Ответ:
    Навигационную ссылку на константу получить не получится(
    Получится только так:
    Код 1C v 8.2 УП
    т.е. в процедуру ПриСозданииНаСервере поместить картинку во временное хранилище и она там сидит пока закроете форму

    Есть форма списка справочника "Сотрудники".
    В нем есть реквизит "Фото", который имеет тип "СправочникСсылка.ХранилищеДополнительнойИнформации" (справочник "ХранилищеДополнительнойИнформации" по структуре полностью совпадает анологичным справочником в 1С 8.1).
    В реквизиты формы списка добавил "АдресКартинки" тип "строка", в элементы добавил поле "Картинка" (вид - поле картинки) с путем к данным "АдресКартинки". Как вывести Картинку?

    Ответ:
    Код 1C v 8.2 УП
    "Хранилище" - это "стандартный" реквизит справочника "ХранилищеДополнительнойИнформации".

    Имеется регистр сведений с именем "Изображения" следующей структуры:
    Измерения:
    - ИдИзображения (тип - уникальный идентификатор);
    Реквизиты:
    - Изображение (тип - ХранилищеЗначений)
    Реализовать возможность записи изображений в него, проблемы не составило. А застрял на получении навигационной ссылки на нужную запись регистра?
    Ответ - Для регистра сведений первым параметром должен быть ключ записи, а не ссылка на объект.
    Т.е. если есть регистр сведений ХранилищеКартинок с изменением Ном (тип справочник Ном) и ресурс Картинка (тип хранилище значений) - код для получения навигационной ссылки должен быть примерно таким:
    Код 1C v 8.2 УП

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