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

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

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

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

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

Код:

Функция ПолучитьЗначениеДопРеквизита(Ссылка, Свойство) Экспорт

    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Свойство",Свойство);
    Массив = Ссылка.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);

    Если Массив.Количество() = 0 Тогда
        Возврат Неопределено;
    Иначе
        Возврат Массив[0].Значение;
    КонецЕсли;

КонецФункции

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

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

  • Ссылка. Тип: Любая ссылка. Ссылка на искомый объект;
  • Свойство. Тип: План видов характеристик ДополнительныеРеквизитыИСведения. Дополнительное свойство;
  • Значение. Тип: заданный для данного свойства.
Функция ЗаписатьЗначениеДопРеквизита(Ссылка, Свойство, Значение)
	
    Попытка
        ОбъектСсылки = Ссылка.ПолучитьОбъект();
		
	ПараметрыОтбора = Новый Структура;
	ПараметрыОтбора.Вставить("Свойство",Свойство);
	Массив = ОбъектСсылки.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
		
	Если Массив.Количество() = 0 Тогда
            НовоеСвойство = ОбъектСсылки.ДополнительныеРеквизиты.Добавить();
	    НовоеСвойство.Свойство = Свойство;
	    НовоеСвойство.Значение = Значение;
	Иначе
	    Массив[0].Значение = Значение;
	КонецЕсли;	
	
	ОбъектСсылки.Записать();	
    Исключение
	Возврат Ложь;
    КонецПопытки
	
КонецФункции

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


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

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

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

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

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

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

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

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

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

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

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

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с дополнительные реквизиты и сведения

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

Краткое описание механизма дополнительных реквизитов и сведений

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

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

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

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

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

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

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

Для получения дополнительного реквизита использую код вида (пример получения коэффициента брутто в ТОРГ12):

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

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

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

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

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

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

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

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

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

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

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

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

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

Содержание

  1. Поделиться с друзьями
  2. Области
  3. Реклама
  4. Продукт
  5. Новые обсуждения форума
  6. Статистика
  7. Авторское право
  8. Программное создание дополнительных реквизитов
  9. Получить дополнительные реквизиты программно
  10. Записать дополнительные реквизиты программно

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

Области

Реклама

Продукт

Новые обсуждения форума

Статистика

Авторское право

Права на информацию в разделе «Справка УПП», «Справка БП» и «Справка ЗУП» принадлежат фирме 1С (http://1c.ru)

Права на информацию в разделе «Практический опыт» принадлежат Мутовкину А.М.

Перепечатка разрешена только с активной ссылкой на правообладателя.

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

Submitted by admin on пн, 12/08/2014 — 16:07

  • БСП
  • Готовые функции
  • Платформа 8.2
  • Платформа 8.3
  • Практический опыт
  • Программирование
  • УНФ
  • УПП

Допустим вам надо предоставить клиенту обработку, которая должна работать с доп. реквизитами типовой конфигурации. Например необходимо в заказе покупателя поддерживать реквизиты ORDER_ID, DEP_ID, CLIENT_ID, PLDATE, PAYTYPE, котрые получаются при обмене с ИнфоАптека 3. Объяснять заказчику как добавить доп. реквизиты не всегда удобно. Сделаем это сами за него.

//выполним начальные настройки доп. реквизитов
&НаСервере
Процедура НачальныеНастройкиНаСервере ()

//включим константу использования
Если Не Константы . ИспользоватьДополнительныеРеквизитыИСведения . Получить () Тогда
Константы . ИспользоватьДополнительныеРеквизитыИСведения . Установить ( Истина );
КонецЕсли;

//создадим строковые доп. реквизиты длины 100
ПроверитьДобавитьСтроковыйДопРеквизитЗаказаПокупателя ( «ORDER_ID» , 100 );
ПроверитьДобавитьСтроковыйДопРеквизитЗаказаПокупателя ( «DEP_ID» , 100 );
ПроверитьДобавитьСтроковыйДопРеквизитЗаказаПокупателя ( «CLIENT_ID» , 100 );
ПроверитьДобавитьСтроковыйДопРеквизитЗаказаПокупателя ( «PLDATE» , 100 );
ПроверитьДобавитьСтроковыйДопРеквизитЗаказаПокупателя ( «PAYTYPE» , 100 );

//проверим и создадим строковый доп. реквизит к документу заказ покупателя
&НаСервере
Процедура ПроверитьДобавитьСтроковыйДопРеквизитЗаказаПокупателя ( ИмяРеквизита , ДлинаСтроки = )

//пробуем найти доп. реквизит по заголовку
ЭлПВХ_Ссылка = ПланыВидовХарактеристик . ДополнительныеРеквизитыИСведения . НайтиПоРеквизиту ( «Заголовок» , ИмяРеквизита );
Если ЭлПВХ_Ссылка . Пустая () Тогда
//если не найдено, то создадим новый
ЭлПВХ = ПланыВидовХарактеристик . ДополнительныеРеквизитыИСведения . СоздатьЭлемент ();
ЭлПВХ . Заголовок = ИмяРеквизита ;
ЭлПВХ . НаборСвойств = Справочники . НаборыДополнительныхРеквизитовИСведений . Документ_ЗаказПокупателя ;
ЭлПВХ . Наименование = ЭлПВХ . Заголовок + » (» + ЭлПВХ . НаборСвойств + «)» ;
ЭлПВХ . ТипЗначения = Новый ОписаниеТипов ( «Строка» . Новый КвалификаторыСтроки ( ДлинаСтроки ));
ЭлПВХ . Записать ();
ЭлПВХ_Ссылка = ЭлПВХ . Ссылка ;
КонецЕсли;

//проверим, что реквизит указан в наборе доп. реквизитов заказа покупателя
НаборОб = Справочники . НаборыДополнительныхРеквизитовИСведений . Документ_ЗаказПокупателя . ПолучитьОбъект ();
Если НаборОб . ДополнительныеРеквизиты . Найти ( ЭлПВХ_Ссылка , «Свойство» ) = Неопределено Тогда
//добавим реквизит в набор
СтрНаборОб = НаборОб . ДополнительныеРеквизиты . Добавить ();
СтрНаборОб . Свойство = ЭлПВХ_Ссылка ;
КонецЕсли;
Если НаборОб . Модифицированность () Тогда
//запишем при необходимости
НаборОб . Записать ();
КонецЕсли;

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

ДокОб = Документы . ЗаказПокупателя . СоздатьДокумент ();
//.
//записать в доп. реквизиты ORDER_ID и другие данные
УстановитьДополнительныйРеквизитОбъекта ( ДокОб , «ORDER_ID» , «32312312» );
//.

&НаСервере
Процедура УстановитьДополнительныйРеквизитОбъекта ( Объект , ИмяРеквизита , ЗначениеРеквизита )

ЭлПВХ_Ссылка = ПланыВидовХарактеристик . ДополнительныеРеквизитыИСведения . НайтиПоРеквизиту ( «Заголовок» , ИмяРеквизита );
Если ЭлПВХ_Ссылка . Пустая () Тогда
Сообщить ( «Не найден доп. реквизит » + ИмяРеквизита + «, значение не установлено!» );
Возврат;
КонецЕсли;

СтрДопРеквизиты = Объект . ДополнительныеРеквизиты . Найти ( ЭлПВХ_Ссылка , «Свойство» );
Если СтрДопРеквизиты = Неопределено Тогда
СтрДопРеквизиты = Объект . ДополнительныеРеквизиты . Добавить ();
КонецЕсли;
СтрДопРеквизиты . Свойство = ЭлПВХ_Ссылка ;
СтрДопРеквизиты . Значение = ЗначениеРеквизита ;

демонстрация доп. реквизитов

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

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

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

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

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

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

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

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

В общем, я выложил внешнюю обработку на ЯД, в коде закоментил где и что должно происходить, остальной мне впринципе не нужен.
Логика в следующем:
1) Пользователь запускает внешнюю обработку
2) Устанавливает дату как критерий отбора
3) Формируется список информации
4) В информации есть поле «Комплект», в поле «Комплект» есть договор, в договоре есть реквизит типа «ИстинаЛожь»
5) Нажимает сформировать документы, происходит процесс создания документа «АктВыполненныхРабот». На данном этапе моя задача провалиться в договор и посмотреть значение реквизита (Уже реализовано) и проставить данный признак в аналогичный признак в документе «АктВыполненныхРабот», при интерактивной работе с документом, при нажатии на реквизит срабатывают некие процедуры, с определенной логикой. Моя задача стоит в том, чтобы при программном проставлении значения в реквизит, отрабатывалась заложенная логика Повторюсь, что с языком 1С работаю день третий, старого прогера нет, и проконсультироваться по коду у него не смогу, работаю прогером но в другом направлении.

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

1C
1
Процедура ПоместитьВыделенныеСтрокиВБуферОбмена(ВыделенныеСтроки, ТабЧасть) Экспорт

Ошибка:

1C
1
2
{ОбщийМодуль.КопированиеСтрокСервер.Модуль(17)}: Метод объекта не обнаружен (НайтиПоИдентификатору)
            СтрокаТаблицы = ТабЧасть.НайтиПоИдентификатору(ТекСтрока);

В параметр передал Массив, и Реализация.Услуги (таб.Часть), в стандартной функции передавалось как Объект.Услуги

Понравилась статья? Поделить с друзьями:

Другие крутые статьи на нашем сайте:

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии