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

Допустим вам надо предоставить клиенту обработку, которая должна работать с доп. реквизитами типовой конфигурации. Например необходимо в заказе покупателя поддерживать реквизиты 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");
//.....

//////////////////////////

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

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

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

КонецПроцедуры


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

Похожие материалы

Справочники

Документы

Отчеты

Обработки