Опубликовано в Статьи по 1С 27.10.2018
В библиотеке стандартных подсистем 1С дополнительные реквизиты и сведения включены и активно применяются. Эти механизмы позволяют добавить дополнительный реквизит к объекту метаданных без изменения типовой конфигурации. Принцип работы дополнительных реквизитов и сведений, их добавление и получение значений.
Отличие дополнительного реквизита от дополнительного сведения в том, что
- Дополнительные реквизиты – список реквизитов, доступных в форме документа или справочника; причем эти реквизиты хранятся в табличной части объекта, к которому они добавлены;
- Дополнительные сведения – список значений доступных по дополнительной кнопке; причем доп. сведения хранятся в отдельном регистре.
После ввода дополнительного реквизита или сведения 1С, можно создать подключаемую обработку, где считать введенные дополнительные данные и задать необходимую логику обработки данных, в которой использовать этот реквизит или сведение.
Как получить 1С дополнительные реквизиты и сведения программно:
Для получения дополнительных данных используем запрос, в котором получим значение дополнительных реквизитов и сведений:
////
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДополнительныеСведения.Свойство,
| ДополнительныеСведения.Значение
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
|ГДЕ
| ДополнительныеСведения.Объект = &Объект»;
Запрос.УстановитьПараметр(«Объект», СсылкаДокумент);
////
Для получения дополнительного реквизита использую код вида:
////
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| НоменклатураДополнительныеРеквизиты.Свойство,
| НоменклатураДополнительныеРеквизиты.Значение
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
| НоменклатураДополнительныеРеквизиты.Свойство = &Свойство
| И НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка»;
Запрос.УстановитьПараметр(«Ссылка», СсылкаДокумент);
Запрос.УстановитьПараметр(«Свойство», ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Коэффициент бруто»));
////
Теперь вы без труда сможете добавить и получить необходимые дополнительные 1С данные без снятия конфигурации 1С с поддержки и изменения типовой конфигурации. Без сомнения, такой инструмент должен быть в арсенале 1С программиста и активно использоваться в работе.
Запрос дополнительных реквизитов справочника |
Я |
23.12.15 — 14:21
Здравствуйте! Очень нужна помощь! 1С 8.3, УТ 11.1. Как запросом получить дополнительные реквизиты добавленные справочнику через режим предприятия?
1 — 23.12.15 — 14:21
а как вы пытались?
2 — 23.12.15 — 14:21
+ доп реквизиты скорее через ТЧ объекта.
3 — 23.12.15 — 14:22
Значения сидят в ТЧ каждого объекта, а сами реквизиты (их описание) — в соответствующем ПВХ и в справочнике «Наборы значений реквизитов»
4 — 23.12.15 — 14:36
(1) вот именно, что никак, потому что первый раз с этим сталкиваюсь
5 — 23.12.15 — 14:37
(3) вижу у объекта ТЧ доп. реквизиты, но что из нее взять, чтоб работать с нужным мне доп. реквизитами? Под описанием реквизитов имеется ввиду их название из предприятия? Не нашел ничего подобного.
6 — 23.12.15 — 15:14
(5) Реквизит Значение из ТЧ — это значение доп.реквизита.
7 — 23.12.15 — 15:46
(5) ИР тебе в помощь — там увидишь стркутуру ТЧ и данные, в ней хранящиеся
8 — 23.12.15 — 15:50
(0)
ВЫБРАТЬ * ИЗ Документ.Мегадокумент.ТЧ_Допреквизитов
9 — 24.12.15 — 09:27
В общем у меня получилось достать данные доп. реквизитов.
Вот код запроса:
Запрос = Новый Запрос;
Запрос.УстановитьПараметр(«МассивОбъектов»,МассивОбъектов);
Запрос.Текст = «ВЫБРАТЬ
| ЗаказКлиента.Номер,
| ЗаказКлиента.Дата КАК ДатаДоговора,
| ЗаказКлиента.Контрагент.Наименование КАК ПокупательКратко,
| ЗаказКлиента.Контрагент.НаименованиеПолное КАК ОрганизацияПокупатель,
| ЗаказКлиента.Контрагент.ИНН КАК ИННПокупателя,
| ЗаказКлиента.Контрагент.КПП КАК КПППокупателя,
| ЗаказКлиента.СуммаДокумента,
| ЗаказКлиента.БанковскийСчетКонтрагента.НомерСчета,
| ЗаказКлиента.БанковскийСчетКонтрагента.БанкДляРасчетов,
| ЗаказКлиента.БанковскийСчетКонтрагента.БИКБанкаДляРасчетов,
| ЗаказКлиента.Контрагент.ДополнительныеРеквизиты.(
| Свойство.Ссылка КАК Название,
| Значение КАК Значение
| ),
| ЗаказКлиента.Товары.(
| НомерСтроки,
| Номенклатура.Наименование,
| Упаковка.ЕдиницаИзмерения,
| КоличествоУпаковок,
| Цена,
| Сумма
| )
|ИЗ
| Документ.ЗаказКлиента КАК ЗаказКлиента
|ГДЕ
| ЗаказКлиента.Ссылка В(&МассивОбъектов)»;
Запрос.Выполнить().Выгрузить();
Как теперь достать из массива нужные мне доп. реквизиты по отдельности?
10 — 24.12.15 — 09:59
Ну пожалуйста, помогите! Нигде в гугле не могу найти как это сделать.
11 — 24.12.15 — 10:04
(10) ты же в (9) все уже сделал
12 — 24.12.15 — 10:06
(11) не все. У меня доп. реквизиты в массиве кучей. Теперь мне нужно вычленить их по отдельности.
13 — 24.12.15 — 10:07
Вычленяй
14 — 24.12.15 — 10:07
У тебя в результате есть поле «ДополнительныеРеквизиты»
15 — 24.12.15 — 10:07
Это таблица значений из двух колонок «Название» и «Значение»
16 — 24.12.15 — 10:08
Свойство.Ссылка КАК Название, замени на Свойство КАК Название,
17 — 24.12.15 — 10:10
(15) ну да, я знаю, я как бэ в курсе) В этой таблице 3 доп. реквизита. Теперь мне нужно их по отдельности заполучить.
18 — 24.12.15 — 10:13
(16) заменил. Так что мне это даст?
19 — 24.12.15 — 10:14
(17) У тебя три реквизита. Значит в таблице 3 строки. Что именно ты хочешь?
20 — 24.12.15 — 10:14
Отдельно получаю:
СтрокаТЧ.ДополнительныеРеквизиты[0].Значение — 1 реквизит
СтрокаТЧ.ДополнительныеРеквизиты[1].Значение — 2 реквизит
СтрокаТЧ.ДополнительныеРеквизиты[2].Значение — 3 реквизит
21 — 24.12.15 — 10:15
Отдельно? Отдельно
22 — 24.12.15 — 10:17
(0) А запрос где ты писать будешь?
23 — 24.12.15 — 10:19
(22) запрос уже написан, смотри выше
24 — 24.12.15 — 10:21
(19) нужно получить значение доп. реквизита и присвоить его отдельной переменной, для дальнейшего использования.
25 — 24.12.15 — 10:21
(20) этот код не работает
26 — 24.12.15 — 10:22
(23) я понял, что написан. ты его в конфигураторе пишешь или где?
27 — 24.12.15 — 10:23
(23)Что именно у тебя не получается?
28 — 24.12.15 — 10:23
Спорим работает?
29 — 24.12.15 — 10:23
(26) эм, ну да, через конфигуратор, в модуле внешней обработки.
30 — 24.12.15 — 10:24
ТЗ = Запрос.Выполнить().Выгрузить();
СтрокаТЧ = ТЗ[0];
СтрокаТЧ.ДополнительныеРеквизиты[0].Значение; // 1 реквизит
СтрокаТЧ.ДополнительныеРеквизиты[1].Значение; // 2 реквизит
СтрокаТЧ.ДополнительныеРеквизиты[2].Значение; // 3 реквизит
31 — 24.12.15 — 10:24
И почему у меня то все получается?
32 — 24.12.15 — 10:26
(31) вылетает ошибка: неопознанный оператор.
33 — 24.12.15 — 10:26
В какой строке?
34 — 24.12.15 — 10:26
(30) так должно работать)
35 — 24.12.15 — 10:29
(33) в этих трех:
СтрокаТЧ.ДополнительныеРеквизиты[0].Значение;// 1 реквизит
СтрокаТЧ.ДополнительныеРеквизиты[1].Значение;// 2 реквизит
СтрокаТЧ.ДополнительныеРеквизиты[2].Значение;// 3 реквизит
36 — 24.12.15 — 10:30
1) точку с запятой пропустил
2) Это просто пример. Ну сделай так:
Реквизит1 = СтрокаТЧ.ДополнительныеРеквизиты[0].Значение;
Реквизит2 = СтрокаТЧ.ДополнительныеРеквизиты[1].Значение;
Реквизит3 = СтрокаТЧ.ДополнительныеРеквизиты[2].Значение;
37 — 24.12.15 — 10:32
(36) Ошибок нет. Теперь этим реквизиту 1,2 и 3 присвоено значение тех доп. реквизитов?
Nolan
38 — 24.12.15 — 10:34
(37) Посмотри как пользоваться отладчиком. Тогда ты сможешь сам проверять значения.
В библиотеке стандартных подсистем 1С дополнительные реквизиты и сведения включены и активно применяются. Эти механизмы позволяют добавить дополнительный реквизит к объекту метаданных без изменения типовой конфигурации. В публикации хочу продемонстрировать работу дополнительных реквизитов и сведений, их добавление и получение значений.
Краткое описание механизма дополнительных реквизитов и сведений
Пример добавление дополнительного реквизита вручную вы можете посмотреть в публикации Брутто в ТОРГ12, где добавляется новый реквизит «Коэффициент брутто» в справочнике «Номенклатура». Таким образом можно добавлять реквизиты всех известных типов (число, строка, булево, список значений, ссылки на справочники и т.д.) к распространенным справочникам и документам 1С.
Отличие дополнительного реквизита от дополнительного сведения в том, что
- Дополнительные реквизиты – список реквизитов, доступных в форме документа или справочника; причем эти реквизиты хранятся в табличной части объекта, к которому они добавлены;
- Дополнительные сведения – список значений доступных по дополнительной кнопке; причем доп. сведения хранятся в отдельном регистре.
После ввода дополнительного реквизита или сведения 1С, можно создать подключаемую обработку, где считать введенные дополнительные данные и задать необходимую логику обработки данных, в которой использовать этот реквизит или сведение.
Для получения дополнительных данных приведу примеры запросов, в которых получу 1С дополнительные реквизиты и сведения.
Для получения дополнительного сведения использую запрос вида:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ДополнительныеСведения.Свойство, | ДополнительныеСведения.Значение |ИЗ | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения |ГДЕ | ДополнительныеСведения.Объект = &Объект"; Запрос.УстановитьПараметр("Объект", СсылкаДокумент);
Для получения дополнительного реквизита использую код вида (пример получения коэффициента брутто в ТОРГ12):
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НоменклатураДополнительныеРеквизиты.Свойство, | НоменклатураДополнительныеРеквизиты.Значение |ИЗ | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты |ГДЕ | НоменклатураДополнительныеРеквизиты.Свойство = &Свойство | И НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", СсылкаДокумент); Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Коэффициент бруто"));
Теперь вы без труда сможете добавить и получить необходимые дополнительные 1С данные без снятия конфигурации 1С с поддержки и изменения типовой конфигурации. Без сомнения, такой инструмент должен быть в арсенале 1С программиста и активно использоваться в работе.
На чтение 2 мин. Просмотров 635 Опубликовано 15.12.2019
Примеры работы с дополнительными реквизитами.
Как получить значение дополнительного реквизита:
Пример: мы делаем печатную форму документа «Заказ клиента» и хотим вывести на неё значение определённого дополнительного реквизита — «Должность покупателя».
Используем вложенный запрос, в котором соединяем левым соединением таблицу «Дополнительные реквизиты» документа «Заказ клиента» с Планом видов характеристик «Дополнительные реквизиты и сведения». Устанавливаем условие: заголовок дополнительного реквизита должен быть таким – «Должность покупателя». Таблицы соединяем по ссылке на «Заказ клиента».
Получается вот такой запрос:
Также можно использовать метод НайтиПоНаименованию ( «***» ) .
Переменная Ссылка – это ссылка на «Договор контрагента».
Проверка на предмет того, что дополнительный реквизит заполнен:
Как изменить значения дополнительных реквизитов:
Задействуем общий модуль УправлениеСвойствами , который входит в состав БСП.
Юзайте на здоровья!
3 thoughts on “Получить значение дополнительных реквизитов 1С 8”
Спасибо, очень помогло.
К сожалению, на строчке
Запрос.УстановитьПараметр(«Объект», Объект);
спотыкается и отказывается дальше работать
Как редактировать доп реквизиты:
редактировать их состав можно тут:
хранятся они тут:
где типы реквизитов:
получить их в запросе можно так:
НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка,
НоменклатураДополнительныеРеквизиты.Ссылка.Код КАК Код,
НоменклатураДополнительныеРеквизиты.Свойство КАК Свойство,
НоменклатураДополнительныеРеквизиты.Значение КАК Значение
Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
Разберем что откуда берется.
Дополнительные реквизиты заводятся в «ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения» и там же указан тип значений допРеквизитов:
ДополнительныеРеквизитыИСведения.Ссылка КАК Ссылка,
ДополнительныеРеквизитыИСведения.ТипЗначения КАК ТипЗначения
ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
Для справки: Кроме ссыка и типЗначения в «ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения» хранится куча свойств этих реквизитов
Если указан типЗначеня «ДополнительноеЗначение», то виды этих доп значений можем посмотреть тут:
ЗначенияСвойствОбъектов.Владелец КАК Владелец,
ЗначенияСвойствОбъектов.Ссылка КАК Ссылка,
ЗначенияСвойствОбъектов.Владелец.ТипЗначения КАК ВладелецТипЗначения
Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
а сами значения дополнительных реквизитов хранятся тут:
Google+
//прим. доп. сведения для спр.контрагенты
Функция РН_ПолучитьЗначениеДопРеквизита(Контрагент,НаименованиеДопРеквизита,ЭтоДопСведение = Ложь)
Запрос = Новый Запрос;
Если ЭтоДопСведение Тогда
Запрос.Текст =
«ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| ДополнительныеСведения.Значение
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
|ГДЕ
| ДополнительныеСведения.Объект = &Ссылка
| И ДополнительныеСведения.Свойство.Заголовок = &НаименованиеДопРеквизита
| И НЕ ДополнительныеСведения.Свойство.ПометкаУдаления»
Иначе
Запрос.Текст =
«ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| КонтрагентыДополнительныеРеквизиты.Значение
|ИЗ
| Справочник.Контрагенты.ДополнительныеРеквизиты КАК КонтрагентыДополнительныеРеквизиты
|ГДЕ
| КонтрагентыДополнительныеРеквизиты.Свойство.Заголовок = &НаименованиеДопРеквизита
| И КонтрагентыДополнительныеРеквизиты.Ссылка = &Ссылка
| И НЕ КонтрагентыДополнительныеРеквизиты.Свойство.ПометкаУдаления»;
КонецЕсли;
Запрос.УстановитьПараметр(«НаименованиеДопРеквизита», НаименованиеДопРеквизита);
Запрос.УстановитьПараметр(«Ссылка», Контрагент);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Количество() > 0 Тогда
Выборка.Следующий();
Возврат Выборка.Значение
Иначе
Возврат «»;
КонецЕсли;
КонецФункции
//пример использования к прим. в печатной форме ТОРГ12
НеТиповоеПредставлениеГрузополучателя = РН_ПолучитьЗначениеДопРеквизита(СведенияОДокументе.Грузополучатель,»РН_НаименованиеДляПечати»,Ложь);
Yulunga 1142 / 689 / 203 Регистрация: 22.04.2013 Сообщений: 5,159 Записей в блоге: 1 |
||||
1 |
||||
запрос к доп реквизитам23.03.2021, 08:49. Показов 9610. Ответов 5 Метки нет (Все метки)
всем добра. Добавлено через 3 минуты
танцевал с этим условием по-разному, которое щас выглядит как выбор когда тогда Добавлено через 19 минут
0 |
Scratchsv 369 / 173 / 74 Регистрация: 04.03.2020 Сообщений: 659 |
||||
23.03.2021, 09:36 |
2 |
|||
Сообщение было отмечено Tklwegsd как решение РешениеМожет так:
1 |
Phil 434 / 305 / 92 Регистрация: 28.05.2014 Сообщений: 1,247 |
||||
23.03.2021, 09:40 |
3 |
|||
Yulunga, Ничего не понял, но очень интересно) Есть документ и из него нужно получить значение доп реквизита? Если есть БСП более-менее не старая, то
0 |
1142 / 689 / 203 Регистрация: 22.04.2013 Сообщений: 5,159 Записей в блоге: 1 |
|
23.03.2021, 10:09 [ТС] |
4 |
Scratchsv, спасибо.
0 |
369 / 173 / 74 Регистрация: 04.03.2020 Сообщений: 659 |
|
23.03.2021, 10:29 |
5 |
А чё не получилось-та. Не находит? Даёт ошибку? Добавлено через 8 минут
0 |
1142 / 689 / 203 Регистрация: 22.04.2013 Сообщений: 5,159 Записей в блоге: 1 |
|
23.03.2021, 11:10 [ТС] |
6 |
щас получилось. чо не получилось вчера — уже не найти. я запрос удалил. но делал также
0 |