как программно обратиться к дополнительному реквизиту в управляемых формах

Содержание

1С БСП. Дополнительные реквизиты и сведения

Введение

В этой статье я хотел бы рассказать об архитектуре, использовании и особенностях реализации подсистемы «Свойства» из инструментария разработчика «1С:Библиотека стандартных подсистем» (1С БСП).

Для начала предлагаю разобраться с терминологией 1С БСП: согласно ИТС дополнительные реквизиты и сведения — это свойства. По моему мнению, подсистема «Свойства» (Управление свойствами) — это очень мощный функционал, который позволяет во многих случаях отказаться от снятия конфигурации с поддержки или внесения ненужных изменений и ошибок в конфигурацию.

Архитектура

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

Дополнительные сведения отличаются от дополнительных реквизитов прежде всего расположением, дополнительные сведения содержатся в отдельном регистре с одноименным названием, а дополнительные реквизиты являются табличной частью объекта, к которому относятся. На рисунке ниже слева-направо изображены: элемент справочника «Наборы дополнительных реквизитов и свойств», элемент плана видов характеристик и список регистра сведений «Дополнительные сведения».

Следующий рисунок изображает пример дополнительного реквизита, слева-направо: элемент справочника «Наборы дополнительных реквизитов и свойств», элемент плана видов характеристик и элемент справочника, в который был добавлен дополнительный реквизит.

Также стоит учитывать, что большая часть объектов метаданных в справочнике «Наборы дополнительных реквизитов и сведений» является предопределённой:

Однако, заполнение этих данных происходит программно, при внедрении 1С БСП или обновлении информационной базы — для этого в общих модулях добавляют процедуру ПриПолученииПредопределенныхНаборовСвойств. Уникальный идентификатор задаётся в явном виде, в т.ч. для того чтобы облегчить процедуры обмена между базами.

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

Полный список функций и процедур находится в общем модуле УправлениеСвойствами в блоке, озаглавленным: «Процедуры и функции для стандартной обработки дополнительных реквизитов».

Использование

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

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

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

Примеры получения свойств без запроса:

Особенности реализации

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

Чтобы найти реквизит на форме 1С БСП создаёт новые реквизиты формы Свойства_ОписаниеДополнительныхРеквизитов и Свойства_ОписаниеЗависимыхДополнительныхРеквизитов, с помощью них можно установить однозначное соответствие между элементом и значением объекта:

Второй особенностью реализации можно выделить невозможность создания свойства с мутабельным типом, с одной стороны это очевидное ограничение, с другой тип «Список значений» вполне допустим, но только для дополнительного реквизита (у дополнительных сведений невозможность связана с архитектурными ограничениями, так как объект и свойство — это измерения регистра «Дополнительные сведения»). Возможно, отсутствие такого типа связано со сложностями при обмене, а возможно в скором времени это будет реализовано, предлагаю посмотреть на пример такой реализации ниже.

Добавим новый дополнительный реквизит для справочника физические лица «Номера счетов»

Добавляем программно, вторую запись в табличную часть «Дополнительные реквизиты» справочника «Физические лица» с тем же самым свойством:

Немного модифицируем код функции ЗначенияСвойств в общем модуле УправлениеСвойствамиСлужебный:

А также код процедуры ЗаполнитьДополнительныеРеквизитыВФорме в общем модуле УправлениеСвойствами:

Таким образом мы можем сохранять и восстанавливать значения реквизитов, которые, принимают множество значений.

Работа в примерах была осуществлена с версией БСП: 3.1.2.245

Источник

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

Сколько не пробовал добавлять постоянно появляются зачеркнутые доп реквизиты.

БСП злиться, что с ней работают не ручками, а пытаются грубо сломать полностью.

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

///////////////////////Поиск созданного набораДопРеквизитов или использование созданного вручную(Если не найден)/////////////////
ЗапросНаборыДополнительныхРеквизитов = новый запрос;
ЗапросНаборыДополнительныхРеквизитов.Текст = «ВЫБРАТЬ
| НаборыДополнительныхРеквизитовИСведений.Ссылка КАК Ссылка
|ИЗ
| Справочник.НаборыДополнительныхРеквизитовИСведений КАК НаборыДополнительныхРеквизитовИСведений
|ГДЕ
| НаборыДополнительныхРеквизитовИСведений.Расш1_IDПостащика = &Наим»;
ЗапросНаборыДополнительныхРеквизитов.УстановитьПараметр(«Наим», струк.categoryId);
Результат = ЗапросНаборыДополнительныхРеквизитов.Выполнить().Выгрузить();
Если Результат.Количество()<>0 тогда
НаборыДополнительныхРеквиз = Результат[0].Ссылка.ПолучитьОбъект();
Иначе
НаборыДополнительныхРеквиз = РанееПодготовленныйНабор.ссылка;
КонецЕсли;
////////////////////////Поиск доп реквизитов в данном наборе совйсв///////////////////////////////
Запрос = новый запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ДополнительныеРеквизитыИСведения.Ссылка КАК Ссылка
|ИЗ
| ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
|ГДЕ
| ДополнительныеРеквизитыИСведения.Наименование = &ЗнчНаименования
| И ДополнительныеРеквизитыИСведения.НаборСвойств = &ЗнчНабора»;
Запрос.УстановитьПараметр(«ЗнчНаименования»,строчка.СвойствоХарак);
Запрос.УстановитьПараметр(«ЗнчНабора»,НаборыДополнительныхРеквиз.ссылка);

Результат1 = Запрос.Выполнить().Выгрузить();
////////////////////Создание доп реквизитов ///////////////////////////
Если Результат1.Количество()=0 тогда

НоваяХарактеристика = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
НоваяХарактеристика.Наименование = строчка.СвойствоХарак;
НоваяХарактеристика.ВыводитьВВидеГиперссылки=Ложь;
НоваяХарактеристика.ДополнительныеЗначенияИспользуются=Ложь;
НоваяХарактеристика.ДополнительныеЗначенияСВесом=Ложь;
НоваяХарактеристика.Заголовок = строчка.СвойствоХарак;
НоваяХарактеристика.НаборСвойств = НаборыДополнительныхРеквиз.ссылка;
НоваяХарактеристика.Виден=Истина;
Если строчка.СвойствоХарак = «Детальное описание» тогда
Новарак.ТипЗначения=ОбщегоНазначения.ОписаниеТипаСтрока(0);
Иначе
Новарак.ТипЗначения=ОбщегоНазначения.ОписаниеТипаСтрока(1024);
КонецЕсли;
НоваяХарактеристика.Записать();
ПолученноеСвойство = НоваяХарактеристика.Ссылка;

новыйРеквизит = НаборыДополнительныхРеквиз.ДополнительныеРеквизиты.Добавить();
новыйРеквизит.Свойство = ПолученноеСвойство;
новыйРеквизит.ИмяПредопределенногоНабора = строчка.СвойствоХарак;
Иначе
ПолученноеСвойство = Результат1[0].ссылка;
КонецЕсли;

Если строчка.ЗначениеСвойства<>«» тогда
НовыйРеквизитНоменклатуры = НоваяПозиция.ДополнительныеРеквизиты.Добавить();
НовыйРеквизитНоменклатуры.Свойство = ПолученноеСвойство;
НовыйРеквизитНоменклатуры.Значение = строчка.ЗначениеСвойства;
КонецЕсли;

Многабукаф, ниасилил.
Нашел решение попроще вот здесь и немного универсализировал.

Источник

S-Студия

Блог о внедрении и технологиях 1С

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

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

Вот пара задач на размышление:

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

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

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

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

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

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

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

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

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

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

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

Источник

Программное создание дополнительных реквизитов в 1с 8.3

Введение.

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

Дополнительные реквизиты и сведения– механизм, позволяющий не внося изменения в конфигурацию расширить её функциональность. Например, можно добавить дополнительные реквизит в документ Реализация товаров и услуг, для того, чтобы заполнять место погрузки или разгрузки в накладной. Причем сделать это нужно именно со стороны пользователя. Сейчас на смену этому механизму пришли расширения, однако пользователь самостоятельно сделать подобную настройку уже не сможет. Поэтому данный механизм еще актуален. Более того, расширения не работают в базовых версиях конфигураций, и тогда решать некоторые задачи приходится только с помощью дополнительных реквизитов.

Давайте теперь поговорим о таком важном моменте как создание дополнительного реквизита. Допустим, вы создали внешнюю печатную форму для документа Счет на оплату покупателю. И в ней в зависимости от значения некоторого параметра в справочнике Контрагенты будет включаться отображение некоторого столбца. Параметр этот, естественно, отсутствует в типовой конфигурации, однако мы знаем что есть замечательный механизм дополнительных реквизитов. Теперь у нас появляется два варианта.

Вариант долгий и не оптимальный.

Нужно всего лишь попросить пользователя создать этот реквизит для справочника Контрагенты, написать длинную инструкцию, так как скорее всего пользователь никогда не слышал ни о дополнительных реквизитах, ни тем более о том как и где их создавать. Более того нужно еще быть уверенным, что пользователь нигде не ошибется в наименовании и типе создаваемого объекта.

Вариант незаметный для пользователя.

Сделать все эти действия можно программно и максимально освободить пользователя от лишних движений. В качестве примера попробуем создать дополнительный реквизит для справочника Контрагенты. Далее привожу текст процедуры, которая сделает все за нас. В тексте есть комментарии, так что разобраться не составит труда.

Также я создал простую обработку, с одной командой, которая при нажатии будет создавать реквизит с наименованием, которое можно ввести на форме обработки.

Отметим, что необходимо обязательно сделать проверку на существование данного реквизита, так как пользователь мог повторно подключать нашу гипотетическую печатную форму. Так же не забудьте заполнить реквизит Имя – оно должно быть без пробелов. Это служебный реквизит, с помощью которого мы в дальнейшем сможем обращаться к значению нашего дополнительного реквизита. Если вы его не зададите – система сгенерирует его автоматически, но оно будет длинным и «некрасивым». Как несложно заметить, реквизит создался, и именно так как мы это описали в процедуре создания. Строковый тип длиной 250 символов.

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

Источник

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

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

Программное изменение дополнительных свойств и реквизитов объектов
Здравствуйте! 1С 8.2 УТ 11.0, есть доп. реквизит Сезон, программно не заполняется Запрос =.

Как создать обработчик события для программно созданных реквизитов?
Добрый день. У меня такая проблема. При открытии формы элемента справочника у меня создаются.

Заполнение реквизитов справочника Номенклатура программно в 1С
Здравствуйте. Помогите решить задачку. Необходимо заполнить реквизит Брэнд в справочнике.

Добавлено через 1 минуту
Как можно достучаться до значения данного реквизита? с 1С работаю второй день, архитектуру (что откуда брать) пока не знаю

Добавлено через 13 минут
Реквизит добавлен с помощью «Дополнительных реквизитов» репозитория «Планы видов характеристик»

Решение

Вроде получилось, теперь

Реализация = Документы.АктВыполненныхРабот.СоздатьДокумент();
Реализация._ДвиженияОПР = истина;

Падает, пишет, что поле недоступно для записи

Добавлено через 55 минут
Попытался переписать процедуру под внешнюю обработку, в параметр передал значение объекта Реализация. но сразу же запоролся на функции

Как программно обратиться к процедуре в модуле формы полученного объекта?
Доброго всем. 1С Бухгалтерия 8.2. Есть документ «Отчет производства за смену». На вкладке.

Как программно обратиться к журналу документов
Добрый день! Конфигурация 1с 7.7 Подскажите как программно обратится к документу из журнала.

Источник

Операционные системы и программное обеспечение