1С Дополнительные реквизиты на форме при помощи расширения

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

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

2) Следующая задача — сделать сохранение значения данного реквизита с привязкой к документы. Самое удобное — хранить значение в специально предназначенном для этого регистре ДополнительныеРеквизитыИСведения. В нём два измерения: обьект и Свойство. Обьект в нашем случае — это документ Реализации, а свойство нужно задать в ПланеВидовХарактеристик.ДополнительныеРеквизитыИСведения. Например так:

  

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

&НаСервере
Функция ЗаписатьЗначениеПокупкиССайта(параметр)	
		МенеджерЗаписи = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
		МенеджерЗаписи.Объект = объект.Ссылка;
		МенеджерЗаписи.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Продажа с сайта");		
		МенеджерЗаписи.Значение=параметр;
		МенеджерЗаписи.Записать();	
конецфункции

&НаСервере
Функция ПолучитьЗначениеГалочки();
	зн=РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей();
	отбор=зн.Отбор;
	отбор.Объект.Установить(объект.Ссылка);
	отбор.Свойство.Установить(ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Продажа с сайта"));		
	зн.Прочитать();	
	галочка=ложь;
	для каждого стр из зн   цикл
		галочка=стр.Значение;
	конеццикла;
	возврат галочка;
КонецФункции  	
&НаКлиенте
Процедура Расш1_ПровестиИзФормыПосле(Команда)
ЗаписатьЗначениеПокупкиССайта(этаформа.ПокупкаССайта);
КонецПроцедуры

&НаКлиенте
Процедура Расш1_ПровестиИЗакрытьИзФормыПосле(Команда)
	Расш1_ПровестиИзФормыПосле(Команда);
КонецПроцедуры

&НаКлиенте
Процедура Расш1_ПриОткрытииПосле(Отказ)
	этаформа.ПокупкаССайта=ПолучитьЗначениеГалочки();
КонецПроцедуры

Комментарии:

1 мысль о “1С Дополнительные реквизиты на форме при помощи расширения”

  1. Слегка поправлю. В целом идея хорошая. Пригодилась. Легче чем внедрять БСП. Подсистема Свойства

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

    &НаСервере
    Функция ПолучитьЗначениеОперации();
    зн=РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей();
    отбор=зн.Отбор;
    отбор.Объект.Установить(объект.Ссылка);
    отбор.Свойство.Установить(ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту(«Имя», «ОперацияДокументаОРП»));
    зн.Прочитать();
    ОперацияДокумента = Неопределено;
    для каждого стр из зн цикл
    ОперацияДокумента = стр.Значение;
    конеццикла;
    возврат ОперацияДокумента;
    КонецФункции

    &НаКлиенте
    Процедура Расш1_ПровестиИзФормыПосле(Команда)
    ЗаписатьЗначениеОперацииДокумента(этаформа.ОперацияДокумента);
    КонецПроцедуры

    &НаКлиенте
    Процедура Расш1_ПровестиИЗакрытьИзФормыПосле(Команда)
    Расш1_ПровестиИзФормыПосле(Команда);
    КонецПроцедуры

    &НаКлиенте
    Процедура Расш1_ПриОткрытииПосле(Отказ)
    этаформа.ОперацияДокумента=ПолучитьЗначениеОперации();
    КонецПроцедуры

    &НаСервере
    Процедура Расш1_ПослеЗаписиНаСервереПосле(ТекущийОбъект, ПараметрыЗаписи)
    ЗаписатьЗначениеОперацииДокумента(этаформа.ОперацияДокумента);
    КонецПроцедуры

    &НаКлиенте
    Процедура Расш1_ОперацияДокументаПриИзмененииПосле(Элемент)
    ЭтаФорма.Модифицированность = истина;
    КонецПроцедуры

    #КонецОбласти

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.