Получить значение доп реквизита программно 1с бсп

  Маркет42 - Место для твоих разработок  

Получить значение дополнительного реквизита типовой функцией

Я
   YFedor

03.06.21 — 13:55

Добрый день, коллеги!

Напомните, если кто помнит, как получить значение дополнительного реквизита объекта типовой функцией для конфигураций на БСП, например ЗуП 3.1

В дополнительном реквизите есть поле «Имя», на форме отображается в группе «Для разработчиков». Как я понял — это некий уникальный идентификатор этого дополнительного реквизита.

Наверняка должна быть типовая функция получения значения этого реквизита по ссылке на объект

  

Партнерская программа EFSOL Oblako

   acht

1 — 03.06.21 — 14:47

(0) ИТС -> Библиотека стандартных подсистем 3.1.4. -> Документация -> Глава 4. Программный интерфейс -> Свойства -> Интерфейс

   1Сергей

2 — 03.06.21 — 14:50

ЕМНИП нет такой простой функции. Там сначала придется подготовить список доп.реквизитов одной функцией, потом передатье его вместе с объектом (ссылкой) в другую функцию, и получишь на выходе структуру. Я плюнул и написал свою

  

Вафель

3 — 03.06.21 — 15:11

УправлениеСвойствами. что-то там.
у реквизита нужно Имя задать

Быстрый старт в Python для 1С Разработчиков | 1s-to-python.ru

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

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

Пример: мы делаем печатную форму документа «Заказ клиента» и хотим вывести на неё значение определённого дополнительного реквизита — «Должность покупателя».

Используем вложенный запрос, в котором соединяем левым соединением таблицу «Дополнительные реквизиты» документа «Заказ клиента» с Планом видов характеристик «Дополнительные реквизиты и сведения». Устанавливаем условие: заголовок дополнительного реквизита должен быть таким – «Должность покупателя». Таблицы соединяем по ссылке на «Заказ клиента».

Получается вот такой запрос:

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

Также можно использовать метод НайтиПоНаименованию(«***»).

Пример запроса:

"ВЫБРАТЬ 
|	ДоговорыКонтрагентовДополнительныеРеквизиты.Значение, 
|	ДоговорыКонтрагентовДополнительныеРеквизиты.Свойство 
|ИЗ 
|	Справочник.ДоговорыКонтрагентов.ДополнительныеРеквизиты КАК ДоговорыКонтрагентовДополнительныеРеквизиты 
|ГДЕ 
|	ДоговорыКонтрагентовДополнительныеРеквизиты.Ссылка = &Ссылка 
|	И ДоговорыКонтрагентовДополнительныеРеквизиты.Свойство = &Свойство"; 

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

Переменная Ссылка – это ссылка на «Договор контрагента».

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

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

Если ЕстьСтроки.Количество() = 0 Тогда
	// Обработка условия
КонецЕсли;

 Как изменить значения дополнительных реквизитов:

Задействуем общий модуль УправлениеСвойствами, который входит в состав БСП.

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

МассивСтруктур = Новый Массив;
МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", ДопРеквизитДатаОтправки, ТекущаяДата()));
МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", ДопРеквизитДоставка, Истина));
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ЗаказКлиентаСсылка, МассивСтруктур);

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

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

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

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

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

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

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

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

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

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

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

На чтение 4 мин Просмотров 1.4к. Опубликовано 31.07.2019

Содержание

  1. Комментарии
  2. Получить дополнительные реквизиты программно
  3. Записать дополнительные реквизиты программно
  4. Как называются дополнительные реквизиты на форме и в какой момент они появляются на форме?

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

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

Пример: мы делаем печатную форму документа «Заказ клиента» и хотим вывести на неё значение определённого дополнительного реквизита — «Должность покупателя».

Используем вложенный запрос, в котором соединяем левым соединением таблицу «Дополнительные реквизиты» документа «Заказ клиента» с Планом видов характеристик «Дополнительные реквизиты и сведения». Устанавливаем условие: заголовок дополнительного реквизита должен быть таким – «Должность покупателя». Таблицы соединяем по ссылке на «Заказ клиента».

Получается вот такой запрос:

Также можно использовать метод НайтиПоНаименованию ( «***» ) .

Переменная Ссылка – это ссылка на «Договор контрагента».

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

Как изменить значения дополнительных реквизитов:

Задействуем общий модуль УправлениеСвойствами , который входит в состав БСП.

Комментарии

У вас ошибка в коде:
МассивСтруктур.Добавить(Новый Структура(«Свойство, Значение», ДопРеквизитДатаОтправки, ТекущаяДата());

Не хватает закрывающей скобки.

У вас ошибка в коде:
МассивСтруктур.Добавить(Новый Структура(«Свойство, Значение», ДопРеквизитДатаОтправки, ТекущаяДата());

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

Получить дополнительные реквизиты программно

Функция получает значение дополнительного реквизита объекта по ссылке и свойству.

  • Ссылка. Тип: Любая ссылка. Ссылка на искомый объект;
  • Свойство. Тип: План видов характеристик ДополнительныеРеквизитыИСведения. Дополнительное свойство.

Записать дополнительные реквизиты программно

Функция записывает значение доп. реквизита объекта по ссылке и свойству.

  • Ссылка. Тип: Любая ссылка. Ссылка на искомый объект;
  • Свойство. Тип: План видов характеристик ДополнительныеРеквизитыИСведения. Дополнительное свойство;
  • Значение. Тип: заданный для данного свойства.

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

Как называются дополнительные реквизиты на форме и в какой момент они появляются на форме?

Далее привожу решение этих задач — поковыряться с отладчиком пришлось изрядно…

Итак, вот решение:

  1. Для начала смотрим с отладчиком, появились ли Допреквизиты на форме после ПриСозданииНаСервере? Нет. А после ПриОткрытии? Тоже нет. А вот после активизации закладки «Дополнительно» — появились со страшными именами как на скриншоте. Это было создано типовой процедурой УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект), которая создала реквизиты на форме

После чего Система располагает реквизиты на форме

Добавление /изменение реквизитов на форме возможно благодаря следующей интересной конструкции.

Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение, ФорматированнаяСтрока, , ОписаниеСвойства.Наименование, Истина);
ДобавляемыеРеквизиты.Добавить(Реквизит);

Но это нам сейчас все не нужно, так, для любопытства.

А вот чтобы работать с реквизитами нужно научиться получать их имена на форме по имени дополнительного реквизита. На радость разработчикам при работе с допреквизитами на форме Система создает служебный реквизит «Свойства_ОписаниеДополнительныхРеквизитов» который содержит на форме коллекцию данных, где есть все необходимы нам данные, можно найти и по имени, и найти соответствующее свойство ПланаВидаХарактеристик

Далее дело техники. По имени дополнительного реквизита получаем Поле дополнительного реквизита, и делаем с ним что хотим

  1. Используя функцию из п1 — нужно проверить значение поля дополнительного реквизита на форме

3. Используя функцию из п1 — нужно установить значение поля дополнительного реквизита на форме

4. Используя функцию из п1 – нужно выполнить волшебную процедуру «Переместить» для коллекции Элементов формы

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

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

Проверено на КА 2.4.2.132, но вполне универсально для всех БСП неустановленной версии

Вот собственно и все, чем хотел поделиться, ставим лайк, если полезно

  • Распечатать

Оцените статью:

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1

(0 голосов, среднее: 0 из 5)

Поделитесь с друзьями!

Like this post? Please share to your friends:
  • Пользовательские компании для варкрафт 3 reforged
  • Поменялись ли реквизиты по фиксированным платежам
  • Помощь в написании бизнес плана для соц контракта
  • Помощь в получении кредита ип на развитие бизнеса
  • Помощь малому бизнесу в краснодарском крае с нуля