Ном = Справочники.Номенклатура.НайтиПоРеквизиту("Гарантия", ЗначениеРеквизита);
Этот способ подходит для поиска по реквизитам справочника. И он ищет только первый элемент и не годится, если их несколько.
Но, поскольку вы пишете что вам нужно осуществить поиск по дополнительному реквизиту, то вам прийдеться писать запрос, и решение зависит от того, как в вашей конфигурации реализованы дополнительные реквизиты.
Например, в конфигурации УНФ, дополнительные реквизиты, это элементы табличной части справочника Номенклатура. При этом «свойство», т.е. имя реквизита, в вашем случае «Гарантия», это план видов характеристик ДополнительныеРеквизитыИСведения. Запрос будет выглядеть примерно так:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| НоменклатураДополнительныеРеквизиты.Ссылка КАК НоменклатураСсылка
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
| НоменклатураДополнительныеРеквизиты.Свойство = &Свойство
| И НоменклатураДополнительныеРеквизиты.Значение = &Значение";
Запрос.УстановитьПараметр("Значение", ЗначениеГарантии);
Запрос.УстановитьПараметр("Свойство", СсылкаНаПВХ_Гарантия);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
Спасибо всем. Заработало вот так, кому нибудь пригодится.
&НаСервере
Функция НайдемКонтрагента(НаименованиеПоиска,КодКонтрагента)
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ РАЗЛИЧНЫЕ
| КонтрагентыДополнительныеРеквизиты.Ссылка КАК Контрагент
|ИЗ
| Справочник.Контрагенты.ДополнительныеРеквизиты КАК КонтрагентыДополнительныеРеквизиты
|ГДЕ
| КонтрагентыДополнительныеРеквизиты.Значение = &Значение
| И КонтрагентыДополнительныеРеквизиты.Свойство.Имя = &Имя»;
Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«КодУТ», Истина);
Запрос.УстановитьПараметр(«Имя», «КодУТ_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С дополнительные реквизиты и сведения включены и активно применяются. Эти механизмы позволяют добавить дополнительный реквизит к объекту метаданных без изменения типовой конфигурации. В публикации хочу продемонстрировать работу дополнительных реквизитов и сведений, их добавление и получение значений.
Краткое описание механизма дополнительных реквизитов и сведений
Пример добавление дополнительного реквизита вручную вы можете посмотреть в публикации Брутто в ТОРГ12, где добавляется новый реквизит «Коэффициент брутто» в справочнике «Номенклатура». Таким образом можно добавлять реквизиты всех известных типов (число, строка, булево, список значений, ссылки на справочники и т.д.) к распространенным справочникам и документам 1С.
Отличие дополнительного реквизита от дополнительного сведения в том, что
- Дополнительные реквизиты – список реквизитов, доступных в форме документа или справочника; причем эти реквизиты хранятся в табличной части объекта, к которому они добавлены;
- Дополнительные сведения – список значений доступных по дополнительной кнопке; причем доп. сведения хранятся в отдельном регистре.
После ввода дополнительного реквизита или сведения 1С, можно создать подключаемую обработку, где считать введенные дополнительные данные и задать необходимую логику обработки данных, в которой использовать этот реквизит или сведение.
Для получения дополнительных данных приведу примеры запросов, в которых получу 1С дополнительные реквизиты и сведения.
Для получения дополнительного сведения использую запрос вида:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ДополнительныеСведения.Свойство, | ДополнительныеСведения.Значение |ИЗ | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения |ГДЕ | ДополнительныеСведения.Объект = &Объект"; Запрос.УстановитьПараметр("Объект", СсылкаДокумент);
Для получения дополнительного реквизита использую код вида (пример получения коэффициента брутто в ТОРГ12):
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НоменклатураДополнительныеРеквизиты.Свойство, | НоменклатураДополнительныеРеквизиты.Значение |ИЗ | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты |ГДЕ | НоменклатураДополнительныеРеквизиты.Свойство = &Свойство | И НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", СсылкаДокумент); Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Коэффициент бруто"));
Теперь вы без труда сможете добавить и получить необходимые дополнительные 1С данные без снятия конфигурации 1С с поддержки и изменения типовой конфигурации. Без сомнения, такой инструмент должен быть в арсенале 1С программиста и активно использоваться в работе.