1с найти значение дополнительного реквизита по наименованию

Ном = Справочники.Номенклатура.НайтиПоРеквизиту("Гарантия", ЗначениеРеквизита);

Этот способ подходит для поиска по реквизитам справочника. И он ищет только первый элемент и не годится, если их несколько.
Но, поскольку вы пишете что вам нужно осуществить поиск по дополнительному реквизиту, то вам прийдеться писать запрос, и решение зависит от того, как в вашей конфигурации реализованы дополнительные реквизиты.
Например, в конфигурации УНФ, дополнительные реквизиты, это элементы табличной части справочника Номенклатура. При этом «свойство», т.е. имя реквизита, в вашем случае «Гарантия», это план видов характеристик ДополнительныеРеквизитыИСведения. Запрос будет выглядеть примерно так:

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

Спасибо всем. Заработало вот так, кому нибудь пригодится.

&НаСервере

Функция НайдемКонтрагента(НаименованиеПоиска,КодКонтрагента)

Запрос = Новый Запрос;

Запрос.Текст =

«ВЫБРАТЬ РАЗЛИЧНЫЕ

| КонтрагентыДополнительныеРеквизиты.Ссылка КАК Контрагент

|ИЗ

| Справочник.Контрагенты.ДополнительныеРеквизиты КАК КонтрагентыДополнительныеРеквизиты

|ГДЕ

| КонтрагентыДополнительныеРеквизиты.Значение = &Значение

| И КонтрагентыДополнительныеРеквизиты.Свойство.Имя = &Имя»;

Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«КодУТ», Истина);

Запрос.УстановитьПараметр(«Имя», «КодУТ_7fa830250b37400a8c11df50f9bc7e62»); // Это ИМЯ реквизита (не Наименование которое просто = КодУТ, а Имя «для разработчиков»)

Запрос.УстановитьПараметр(«Значение»,КодКонтрагента); // Это значение Вашего реквизита

Результат = Запрос.Выполнить().Выбрать();

Пока Результат.Следующий() цикл

ИскомыйКонтрагент = Результат.Контрагент;

КонецЦикла;

// Сообщить(ИскомыйКонтрагент);

Возврат ИскомыйКонтрагент;

1.    Создание на форме дополнительных реквизитов в 1С 8.3 и их функции

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

Вывести реквизиты на форму можно динамически, при ее открытии. Если смотреть отладчиком, то видно, что после процедур ПриСозданииНаСервере и ПриОткрытии дополнительных реквизитов в 1С 8.3 еще нет. Появятся они, когда активизируется закладка «Дополнительно». При создании на форме, реквизитам присваиваются длинные, страшные, ни о чем не говорящие имена. Например:

Имена значений дополнительных реквизитов на форме

Из-за этого возникают сложности с программным обращением к дополнительным реквизитам в 1С 8.3.

Дополнительные реквизиты на форме создаются типовой процедурой УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме:


Создание дополнительных реквизитов на форме

Посмотрим отладчиком, как выглядит форма с созданными на ней дополнительными реквизитами для программного обращения:

Форма с созданными на ней дополнительными реквизитами в 1С 8.3  

2.     Установка значения дополнительного реквизита в 1С 8.3 с помощью обращения к нему по имени

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

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

Раздел Для разработчиков в нижней части формы характеристики

Вот вариант процедуры, которая получает поле доп. реквизита по его имени:

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

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

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

Код, вызывающий процедуру и устанавливающий значение дополнительному реквизиту в 1С 8.3

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

Специалист компании «Кодерлайн»

Екатерина Редько

Опубликовано в Статьи по 1С 27.10.2018

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

Отличие дополнительного реквизита от дополнительного сведения в том, что

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

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

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

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

////
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДополнительныеСведения.Свойство,
| ДополнительныеСведения.Значение
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
|ГДЕ
| ДополнительныеСведения.Объект = &Объект»;
Запрос.УстановитьПараметр(«Объект», СсылкаДокумент);
////

Для получения дополнительного реквизита использую код вида:

////
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| НоменклатураДополнительныеРеквизиты.Свойство,
| НоменклатураДополнительныеРеквизиты.Значение
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
| НоменклатураДополнительныеРеквизиты.Свойство = &Свойство
| И НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка»;
Запрос.УстановитьПараметр(«Ссылка», СсылкаДокумент);
Запрос.УстановитьПараметр(«Свойство», ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Коэффициент бруто»));
////

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

Как получить значение дополнительного реквизита у сотрудника?

Автор Алексей Рожков, 27 мар 2020, 11:26

0 Пользователей и 1 гость просматривают эту тему.

Привет всем. Как из справочника «сотрудники» получить значение дополнительного реквизита?
Я пытаюсь написать, но ничего не получается.

Конфа — типовая
ЗУП 3.1

Пример:
ИЗ справочника «сотрудники» получить значение дополнительного реквизита с названием «Статья» у сотрудника Иванов Иван Иванович

Как это реализовать?

P.S. Прохожу курсы на Ютубе, но эту задачу нужно решить сейчас, а практики пока нет :) не судите строго :)


Цитата: Алексей Рожков от 27 мар 2020, 11:26
Привет всем. Как из справочника «сотрудники» получить значение дополнительного реквизита?
Я пытаюсь написать, но ничего не получается.

Инфа:
Конфа — типовая
ЗУП 3.1
Управляемое приложение

Пример:
ИЗ справочника «сотрудники» получить значение дополнительного реквизита с названием «Статья» у сотрудника Иванов Иван Иванович

Как это реализовать?

P.S. Прохожу курсы на Ютубе, но эту задачу нужно решить сейчас, а практики пока нет :) не судите строго :)


(1)

//Ссылка   - элемент  справочника "сотрудники"
//Свойство - ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Статья, хотя УТОЧНИТЕ название")
Функция ПолучитьЗначениеДопРеквизита(Ссылка, Свойство) Экспорт
    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Свойство",Свойство);
    Массив = Ссылка.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
    Если Массив.Количество() = 0 Тогда
        Возврат Неопределено;
    Иначе
        Возврат Массив[0].Значение;
    КонецЕсли;
КонецФункции

Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают


Цитата: wise от 27 мар 2020, 11:36
(1)
//Ссылка   - элемент  справочника "сотрудники"
//Свойство - ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Статья, хотя УТОЧНИТЕ название")
Функция ПолучитьЗначениеДопРеквизита(Ссылка, Свойство) Экспорт
    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Свойство",Свойство);
    Массив = Ссылка.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
    Если Массив.Количество() = 0 Тогда
        Возврат Неопределено;
    Иначе
        Возврат Массив[0].Значение;
    КонецЕсли;
КонецФункции

Сделал, по вашему коду, но 1 ошибка не дает запуститься коду.

Скриншот

Переменная не определена (Справочники)  — та самая ошибка. Помогите пожалуйста правильно сформировать код.

Не совсем понял фразу «//Ссылка   — элемент  справочника «сотрудники»» — Я указал «Справочники.Сотрудники», но ругается на это. На какой именно элемент указать нужно? :)

Вот такой у меня получился листинг


//Ссылка   - элемент  справочника "сотрудники"
//Свойство - ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Статья, хотя УТОЧНИТЕ название")
Функция ПолучитьЗначениеДопРеквизита(ссылка, Свойство) Экспорт
    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Свойство",Свойство);
    Массив = Ссылка.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
    Если Массив.Количество() = 0 Тогда
        Возврат Неопределено;
    Иначе
        Возврат Массив[0].Значение;
    КонецЕсли;
КонецФункции

&НаКлиенте
Процедура Команда1(Команда)
ПолучитьЗначениеДопРеквизита(Справочники.Сотрудники,ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Заказ/статья затрат"));
КонецПроцедуры


Цитата: Алексей Рожков от 30 мар 2020, 07:32

Цитата: wise от 27 мар 2020, 11:36
(1)
//Ссылка   - элемент  справочника "сотрудники"
//Свойство - ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Статья, хотя УТОЧНИТЕ название")
Функция ПолучитьЗначениеДопРеквизита(Ссылка, Свойство) Экспорт
    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Свойство",Свойство);
    Массив = Ссылка.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
    Если Массив.Количество() = 0 Тогда
        Возврат Неопределено;
    Иначе
        Возврат Массив[0].Значение;
    КонецЕсли;
КонецФункции

Сделал, по вашему коду, но 1 ошибка не дает запуститься коду.

Скриншот

Переменная не определена (Справочники)  — та самая ошибка. Помогите пожалуйста правильно сформировать код.

Не совсем понял фразу «//Ссылка   — элемент  справочника «сотрудники»» — Я указал «Справочники.Сотрудники», но ругается на это. На какой именно элемент указать нужно? :)

Вот такой у меня получился листинг


//Ссылка   - элемент  справочника "сотрудники"
//Свойство - ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Статья, хотя УТОЧНИТЕ название")
Функция ПолучитьЗначениеДопРеквизита(ссылка, Свойство) Экспорт
    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Свойство",Свойство);
    Массив = Ссылка.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
    Если Массив.Количество() = 0 Тогда
        Возврат Неопределено;
    Иначе
        Возврат Массив[0].Значение;
    КонецЕсли;
КонецФункции

&НаКлиенте
Процедура Команда1(Команда)
ПолучитьЗначениеДопРеквизита(Справочники.Сотрудники,ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Заказ/статья затрат"));
КонецПроцедуры

https://its.1c.ru/db/metod8dev#content:2461:hdoc


1с дополнительные реквизиты и сведения

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

Краткое описание механизма дополнительных реквизитов и сведений

Пример добавление дополнительного реквизита вручную вы можете посмотреть в публикации Брутто в ТОРГ12, где добавляется новый реквизит «Коэффициент брутто» в справочнике «Номенклатура». Таким образом можно добавлять реквизиты всех известных типов (число, строка, булево, список значений, ссылки на справочники и т.д.) к распространенным справочникам и документам 1С.

Отличие дополнительного реквизита от дополнительного сведения в том, что

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

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

Для получения дополнительных данных приведу примеры запросов, в которых получу 1С дополнительные реквизиты и сведения.

Для получения дополнительного сведения использую запрос вида:

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

Для получения дополнительного реквизита использую код вида (пример получения коэффициента брутто в ТОРГ12):

Запрос = Новый Запрос;
Запрос.Текст = 
	"ВЫБРАТЬ
	|	НоменклатураДополнительныеРеквизиты.Свойство,
	|	НоменклатураДополнительныеРеквизиты.Значение
	|ИЗ
	|	Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
	|ГДЕ
	|	НоменклатураДополнительныеРеквизиты.Свойство = &Свойство
	|	И НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", СсылкаДокумент);
Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Коэффициент бруто"));

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

Понравилась статья? Поделить с друзьями:
  • 1с программно добавить колонку реквизита в таблицу значений
  • 1с программно добавить реквизит в табличную часть документа
  • 250000 тысяч рублей на развитие бизнеса от государства 2022
  • 36 реквизит виза ознакомления оформляется следующим образом
  • 4 класс задача с величинами работа производительность время