1С Дополнительные реквизиты на форме при помощи расширения
В своей работе с 1С стараюсь сделать так, чтобы обновления проходили максимально безболезненно. Для этого нужно сохранять не изменяемость конфигурации. В настоящий момент, при помощи «расширений» конфигурации, многие вещи достаточно легко сделать основную конфигурацию не трогая вообще. Ниже рассмотрю, как я сделал задачу по добавлению значения «Покупка с сайта» в документе «Реализация товаров».
1) Выносим в расширение документ документ «Реализация товаров и добавляем реквизит «ПокупкаССайта» в реквизиты формы. Да! именно в реквизиты формы, а не документа. В настоящий момент платформа 1С не дает добавлять в расширения реквизиты документа (но обещают). Перетаскиваем реквизит в элементы и обязательно ставим галочку на «АктивизироватьПоУмолчанию» — иначе на форме при запуске не отобразится:
2) Следующая задача — сделать сохранение значения данного реквизита с привязкой к документы. Самое удобное — хранить значение в специально предназначенном для этого регистре ДополнительныеРеквизитыИСведения. В нём два измерения: обьект и Свойство. Обьект в нашем случае — это документ Реализации, а свойство нужно задать в ПланеВидовХарактеристик.ДополнительныеРеквизитыИСведения. Например так:
И далее создадим обработчики открытия формы и закрытия в которых реализуем чтение из регистра и запись в этот регистр:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
&НаСервере Функция ЗаписатьЗначениеПокупкиССайта(параметр) МенеджерЗаписи = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Объект = объект.Ссылка; МенеджерЗаписи.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Продажа с сайта"); МенеджерЗаписи.Значение=параметр; МенеджерЗаписи.Записать(); конецфункции &НаСервере Функция ПолучитьЗначениеГалочки(); зн=РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей(); отбор=зн.Отбор; отбор.Объект.Установить(объект.Ссылка); отбор.Свойство.Установить(ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Продажа с сайта")); зн.Прочитать(); галочка=ложь; для каждого стр из зн цикл галочка=стр.Значение; конеццикла; возврат галочка; КонецФункции &НаКлиенте Процедура Расш1_ПровестиИзФормыПосле(Команда) ЗаписатьЗначениеПокупкиССайта(этаформа.ПокупкаССайта); КонецПроцедуры &НаКлиенте Процедура Расш1_ПровестиИЗакрытьИзФормыПосле(Команда) Расш1_ПровестиИзФормыПосле(Команда); КонецПроцедуры &НаКлиенте Процедура Расш1_ПриОткрытииПосле(Отказ) этаформа.ПокупкаССайта=ПолучитьЗначениеГалочки(); КонецПроцедуры |