Рассмотрим работу с дополнительными сведениями и дополнительными реквизитами в Конфигураторе на примере конфигурации УТ 11.
Сами элементы дополнительных сведений и дополнительных реквизитов хранятся в плане видов характеристик ДополнительныеРеквизитыИСведения (рис. 1):
Рис. 1. План видов характеристик ДополнительныеРеквизитыИСведения
Значения дополнительных сведений хранятся в непериодическом независимом регистре сведений ДополнительныеСведения (рис. 2):
Рис. 2. Регистр сведений ДополнительныеСведения
Значения дополнительных реквизитов хранятся в табличных частях объектов ДополнительныеРеквизиты, например, справочник Номенклатура (рис. 3):
Рис. 3. Табличная часть объекта ДополнительныеРеквизиты
Получить значения дополнительных сведений и дополнительных реквизитов можно с помощью типовой функции ПолучитьЗначенияСвойств() общего модуля УправлениеСвойствами (рис. 4):
Рис. 4. Функция ПолучитьЗначенияСвойств() общего модуля УправлениеСвойствами
Автор Дина Королева.
Подписывайтесь на канал
«Полезный 1С»
В телеграм канале — наш практический опыт, бизнес-кейсы и способы повышения эффективности компании, которые мы опробовали внутри группы Neti.
Возврат к списку
В ЗУП не знаю, в БП это в ГМ УправлениеСвойствами
// Возвращает значения дополнительных свойств объекта.
//
// Параметры:
// ВладелецСвойств — Ссылка — например, СправочникСсылка.Номенклатура, ДокументСсылка.ЗаказПокупателя, …
// ПолучатьДопРеквизиты — Булево — в результат включать дополнительные реквизиты.
// ПолучатьДопСведения — Булево — в результат включать дополнительные сведения.
// МассивСвойств — Массив — свойства:
// * ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения — значения
// которых следует получить.
// — Неопределено — получить значения всех свойств владельца.
// Возвращаемое значение:
// ТаблицаЗначений — колонки:
// * Свойство — ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения — свойство владельца.
// * Значение — Произвольный — значения любого типа из описания типов свойства объекта метаданных:
// «Метаданные.ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Тип».
//
Функция ПолучитьЗначенияСвойств(ВладелецСвойств,
ПолучатьДопРеквизиты = Истина,
ПолучатьДопСведения = Истина,
МассивСвойств = Неопределено) Экспорт
Опубликовано в Статьи по 1С 27.10.2018
В библиотеке стандартных подсистем 1С дополнительные реквизиты и сведения включены и активно применяются. Эти механизмы позволяют добавить дополнительный реквизит к объекту метаданных без изменения типовой конфигурации. Принцип работы дополнительных реквизитов и сведений, их добавление и получение значений.
Отличие дополнительного реквизита от дополнительного сведения в том, что
- Дополнительные реквизиты – список реквизитов, доступных в форме документа или справочника; причем эти реквизиты хранятся в табличной части объекта, к которому они добавлены;
- Дополнительные сведения – список значений доступных по дополнительной кнопке; причем доп. сведения хранятся в отдельном регистре.
После ввода дополнительного реквизита или сведения 1С, можно создать подключаемую обработку, где считать введенные дополнительные данные и задать необходимую логику обработки данных, в которой использовать этот реквизит или сведение.
Как получить 1С дополнительные реквизиты и сведения программно:
Для получения дополнительных данных используем запрос, в котором получим значение дополнительных реквизитов и сведений:
////
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДополнительныеСведения.Свойство,
| ДополнительныеСведения.Значение
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
|ГДЕ
| ДополнительныеСведения.Объект = &Объект»;
Запрос.УстановитьПараметр(«Объект», СсылкаДокумент);
////
Для получения дополнительного реквизита использую код вида:
////
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| НоменклатураДополнительныеРеквизиты.Свойство,
| НоменклатураДополнительныеРеквизиты.Значение
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
| НоменклатураДополнительныеРеквизиты.Свойство = &Свойство
| И НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка»;
Запрос.УстановитьПараметр(«Ссылка», СсылкаДокумент);
Запрос.УстановитьПараметр(«Свойство», ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Коэффициент бруто»));
////
Теперь вы без труда сможете добавить и получить необходимые дополнительные 1С данные без снятия конфигурации 1С с поддержки и изменения типовой конфигурации. Без сомнения, такой инструмент должен быть в арсенале 1С программиста и активно использоваться в работе.
Примеры работы с дополнительными реквизитами.
Как получить значение дополнительного реквизита:
Пример: мы делаем печатную форму документа «Заказ клиента» и хотим вывести на неё значение определённого дополнительного реквизита — «Должность покупателя».
Используем вложенный запрос, в котором соединяем левым соединением таблицу «Дополнительные реквизиты» документа «Заказ клиента» с Планом видов характеристик «Дополнительные реквизиты и сведения». Устанавливаем условие: заголовок дополнительного реквизита должен быть таким – «Должность покупателя». Таблицы соединяем по ссылке на «Заказ клиента».
Получается вот такой запрос:
"ВЫБРАТЬ | ДополнительныеРеквизиты.ДолжностьПокупателя КАК ДолжностьПокупателя |ИЗ | Документ.ЗаказКлиента КАК Заказ | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ЗаказДополнительныеРеквизиты.Значение КАК ДолжностьПокупателя, | ЗаказДополнительныеРеквизиты.Ссылка КАК Ссылка | ИЗ | Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказДополнительныеРеквизиты | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ПВХДополнительныеРеквизитыИСведения | ПО ЗаказДополнительныеРеквизиты.Свойство = ПВХДополнительныеРеквизитыИСведения.Ссылка | ГДЕ | ПВХДополнительныеРеквизитыИСведения.Заголовок = ""Должность покупателя"") КАК ДополнительныеРеквизиты | ПО (ДополнительныеРеквизиты.Ссылка = Заказ.Ссылка) |ГДЕ | Заказ.Ссылка В(&МассивОбъектов)";
Также можно использовать метод НайтиПоНаименованию(«***»).
Пример запроса:
"ВЫБРАТЬ | ДоговорыКонтрагентовДополнительныеРеквизиты.Значение, | ДоговорыКонтрагентовДополнительныеРеквизиты.Свойство |ИЗ | Справочник.ДоговорыКонтрагентов.ДополнительныеРеквизиты КАК ДоговорыКонтрагентовДополнительныеРеквизиты |ГДЕ | ДоговорыКонтрагентовДополнительныеРеквизиты.Ссылка = &Ссылка | И ДоговорыКонтрагентовДополнительныеРеквизиты.Свойство = &Свойство"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("КПП", Истина); Запрос.УстановитьПараметр("Свойство", Свойство);
Переменная Ссылка – это ссылка на «Договор контрагента».
Проверка на предмет того, что дополнительный реквизит заполнен:
ДопРеквизитСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Дата отправки", Истина); ЕстьСтроки = ЗаказПоставщикуСсылка.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", ДопРеквизитСвойство)); Если ЕстьСтроки.Количество() = 0 Тогда // Обработка условия КонецЕсли;
Как изменить значения дополнительных реквизитов:
Задействуем общий модуль УправлениеСвойствами, который входит в состав БСП.
ДопРеквизитДатаОтправки = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Дата отправки", Истина); ДопРеквизитДоставка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Доставка", Истина); МассивСтруктур = Новый Массив; МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", ДопРеквизитДатаОтправки, ТекущаяДата())); МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", ДопРеквизитДоставка, Истина)); УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ЗаказКлиентаСсылка, МассивСтруктур);
Дополнительные реквизиты в 1с 8 представляют из себя специальную табличную часть у некоторых документов и справочников. В ней хранятся дополнительные данные, касающиеся данного объекта метаданных. Данный механизм реализован только в конфигурация работающих на управляемом приложении. По своему назначению дополнительные реквизиты напоминают дополнительные сведения, разница в том, что доп. сведения хранятся в отдельном регистре, это их плюс, но зато доп. реквизиты автоматически выводятся на форму объекта. В этой статье будет рассказано, как получать и записывать дополнительные реквизиты программно.
Получить дополнительные реквизиты программно
Функция получает значение дополнительного реквизита объекта по ссылке и свойству.
- Ссылка. Тип: Любая ссылка. Ссылка на искомый объект;
- Свойство. Тип: План видов характеристик ДополнительныеРеквизитыИСведения. Дополнительное свойство.
Код:
Функция ПолучитьЗначениеДопРеквизита(Ссылка, Свойство) Экспорт
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Свойство",Свойство);
Массив = Ссылка.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
Если Массив.Количество() = 0 Тогда
Возврат Неопределено;
Иначе
Возврат Массив[0].Значение;
КонецЕсли;
КонецФункции
Записать дополнительные реквизиты программно
Функция записывает значение доп. реквизита объекта по ссылке и свойству.
- Ссылка. Тип: Любая ссылка. Ссылка на искомый объект;
- Свойство. Тип: План видов характеристик ДополнительныеРеквизитыИСведения. Дополнительное свойство;
- Значение. Тип: заданный для данного свойства.
Функция ЗаписатьЗначениеДопРеквизита(Ссылка, Свойство, Значение)
Попытка
ОбъектСсылки = Ссылка.ПолучитьОбъект();
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Свойство",Свойство);
Массив = ОбъектСсылки.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
Если Массив.Количество() = 0 Тогда
НовоеСвойство = ОбъектСсылки.ДополнительныеРеквизиты.Добавить();
НовоеСвойство.Свойство = Свойство;
НовоеСвойство.Значение = Значение;
Иначе
Массив[0].Значение = Значение;
КонецЕсли;
ОбъектСсылки.Записать();
Исключение
Возврат Ложь;
КонецПопытки
КонецФункции
Если вы еще не знаете, как правильно работать с механизмом дополнительных сведений в 1с 8, то прочтите об этом в статье 1С дополнительные сведения запись и получение.
В библиотеке стандартных подсистем 1С дополнительные реквизиты и сведения включены и активно применяются. Эти механизмы позволяют добавить дополнительный реквизит к объекту метаданных без изменения типовой конфигурации. В публикации хочу продемонстрировать работу дополнительных реквизитов и сведений, их добавление и получение значений.
Краткое описание механизма дополнительных реквизитов и сведений
Пример добавление дополнительного реквизита вручную вы можете посмотреть в публикации Брутто в ТОРГ12, где добавляется новый реквизит «Коэффициент брутто» в справочнике «Номенклатура». Таким образом можно добавлять реквизиты всех известных типов (число, строка, булево, список значений, ссылки на справочники и т.д.) к распространенным справочникам и документам 1С.
Отличие дополнительного реквизита от дополнительного сведения в том, что
- Дополнительные реквизиты – список реквизитов, доступных в форме документа или справочника; причем эти реквизиты хранятся в табличной части объекта, к которому они добавлены;
- Дополнительные сведения – список значений доступных по дополнительной кнопке; причем доп. сведения хранятся в отдельном регистре.
После ввода дополнительного реквизита или сведения 1С, можно создать подключаемую обработку, где считать введенные дополнительные данные и задать необходимую логику обработки данных, в которой использовать этот реквизит или сведение.
Для получения дополнительных данных приведу примеры запросов, в которых получу 1С дополнительные реквизиты и сведения.
Для получения дополнительного сведения использую запрос вида:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ДополнительныеСведения.Свойство, | ДополнительныеСведения.Значение |ИЗ | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения |ГДЕ | ДополнительныеСведения.Объект = &Объект"; Запрос.УстановитьПараметр("Объект", СсылкаДокумент);
Для получения дополнительного реквизита использую код вида (пример получения коэффициента брутто в ТОРГ12):
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НоменклатураДополнительныеРеквизиты.Свойство, | НоменклатураДополнительныеРеквизиты.Значение |ИЗ | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты |ГДЕ | НоменклатураДополнительныеРеквизиты.Свойство = &Свойство | И НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", СсылкаДокумент); Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Коэффициент бруто"));
Теперь вы без труда сможете добавить и получить необходимые дополнительные 1С данные без снятия конфигурации 1С с поддержки и изменения типовой конфигурации. Без сомнения, такой инструмент должен быть в арсенале 1С программиста и активно использоваться в работе.
На чтение 4 мин Просмотров 1.4к. Опубликовано 31.07.2019
Содержание
- Комментарии
- Получить дополнительные реквизиты программно
- Записать дополнительные реквизиты программно
- Как называются дополнительные реквизиты на форме и в какой момент они появляются на форме?
Примеры работы с дополнительными реквизитами.
Как получить значение дополнительного реквизита:
Пример: мы делаем печатную форму документа «Заказ клиента» и хотим вывести на неё значение определённого дополнительного реквизита — «Должность покупателя».
Используем вложенный запрос, в котором соединяем левым соединением таблицу «Дополнительные реквизиты» документа «Заказ клиента» с Планом видов характеристик «Дополнительные реквизиты и сведения». Устанавливаем условие: заголовок дополнительного реквизита должен быть таким – «Должность покупателя». Таблицы соединяем по ссылке на «Заказ клиента».
Получается вот такой запрос:
Также можно использовать метод НайтиПоНаименованию ( «***» ) .
Переменная Ссылка – это ссылка на «Договор контрагента».
Проверка на предмет того, что дополнительный реквизит заполнен:
Как изменить значения дополнительных реквизитов:
Задействуем общий модуль УправлениеСвойствами , который входит в состав БСП.
Комментарии
У вас ошибка в коде:
МассивСтруктур.Добавить(Новый Структура(«Свойство, Значение», ДопРеквизитДатаОтправки, ТекущаяДата());
Не хватает закрывающей скобки.
У вас ошибка в коде:
МассивСтруктур.Добавить(Новый Структура(«Свойство, Значение», ДопРеквизитДатаОтправки, ТекущаяДата());
Дополнительные реквизиты в 1с 8 представляют из себя специальную табличную часть у некоторых документов и справочников. В ней хранятся дополнительные данные, касающиеся данного объекта метаданных. Данный механизм реализован только в конфигурация работающих на управляемом приложении. По своему назначению дополнительные реквизиты напоминают дополнительные сведения, разница в том, что доп. сведения хранятся в отдельном регистре, это их плюс, но зато доп. реквизиты автоматически выводятся на форму объекта. В этой статье будет рассказано, как получать и записывать дополнительные реквизиты программно.
Получить дополнительные реквизиты программно
Функция получает значение дополнительного реквизита объекта по ссылке и свойству.
- Ссылка. Тип: Любая ссылка. Ссылка на искомый объект;
- Свойство. Тип: План видов характеристик ДополнительныеРеквизитыИСведения. Дополнительное свойство.
Записать дополнительные реквизиты программно
Функция записывает значение доп. реквизита объекта по ссылке и свойству.
- Ссылка. Тип: Любая ссылка. Ссылка на искомый объект;
- Свойство. Тип: План видов характеристик ДополнительныеРеквизитыИСведения. Дополнительное свойство;
- Значение. Тип: заданный для данного свойства.
Если вы еще не знаете, как правильно работать с механизмом дополнительных сведений в 1с 8, то прочтите об этом в статье 1С дополнительные сведения запись и получение.
Как называются дополнительные реквизиты на форме и в какой момент они появляются на форме?
Далее привожу решение этих задач — поковыряться с отладчиком пришлось изрядно…
Итак, вот решение:
- Для начала смотрим с отладчиком, появились ли Допреквизиты на форме после ПриСозданииНаСервере? Нет. А после ПриОткрытии? Тоже нет. А вот после активизации закладки «Дополнительно» — появились со страшными именами как на скриншоте. Это было создано типовой процедурой УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект), которая создала реквизиты на форме
После чего Система располагает реквизиты на форме
Добавление /изменение реквизитов на форме возможно благодаря следующей интересной конструкции.
Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение, ФорматированнаяСтрока, , ОписаниеСвойства.Наименование, Истина);
ДобавляемыеРеквизиты.Добавить(Реквизит);
Но это нам сейчас все не нужно, так, для любопытства.
А вот чтобы работать с реквизитами нужно научиться получать их имена на форме по имени дополнительного реквизита. На радость разработчикам при работе с допреквизитами на форме Система создает служебный реквизит «Свойства_ОписаниеДополнительныхРеквизитов» который содержит на форме коллекцию данных, где есть все необходимы нам данные, можно найти и по имени, и найти соответствующее свойство ПланаВидаХарактеристик
Далее дело техники. По имени дополнительного реквизита получаем Поле дополнительного реквизита, и делаем с ним что хотим
- Используя функцию из п1 — нужно проверить значение поля дополнительного реквизита на форме
3. Используя функцию из п1 — нужно установить значение поля дополнительного реквизита на форме
4. Используя функцию из п1 – нужно выполнить волшебную процедуру «Переместить» для коллекции Элементов формы
В итоге, можно управлять дополнительными реквизитами на форме – почти так же комфортно, как и собственными. И ничего менять в конфигурации – не пришлось – все управление находится в расширении
Вывод: таким образом, не меняя конфигурацию, и используя механизмы дополнительных реквизитов и расширений всех типовых конфигураций, мы управляем расположением реквизитов и программно контролируем их заполнение и содержание.
Проверено на КА 2.4.2.132, но вполне универсально для всех БСП неустановленной версии
Вот собственно и все, чем хотел поделиться, ставим лайк, если полезно
- Распечатать
Оцените статью:
- 5
- 4
- 3
- 2
- 1
(0 голосов, среднее: 0 из 5)
Поделитесь с друзьями!