Облегченная функция "СвойстваОбъекта" для управляемых форм

18.09.13

Разработка - Универсальные функции

Надоело засорять модули форм мелкими функциями типа ПолучитьВидСкладаНаСервере(Склад)? Пора положить этому конец!

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

&НаКлиенте 
Процедура УстановитьВидимость() ТипСклада = ПолучитьТипСкладаНаСервере(Объект.Склад); Если ТипСклада = ПредопределенноеЗначение("Перечисление.ТипыСкладов.Оптовый") Тогда
Элементы.ДополнительноеПоле.Видимость = Истина
КонецЕсли; КонецПроцедуры &НаСервереБезКонтекста
Функция ПолучитьТипСкладаНаСервере(Склад) Возврат Склад.ТипСклада КонецФункции
 

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

 

Функция   СвойстваОбъекта(Объект, Знач Свойства = "") Экспорт 	
	Попытка 		
		
		Если Свойства = "" Тогда 
			
			КоллекцияРеквизитов = Объект.Метаданные().Реквизиты;
			КоллекцияСтандартныхРеквизитов = Объект.Метаданные().СтандартныеРеквизиты;

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


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

Контрагент = СвойстваОбъекта(КонтрагентСсылка);
Сообщить(Контрагент.ОсновнойДоговор);
Сообщить(Контрагент.Родитель);

Номенклатура = СвойстваОбъекта(НоменклатураСсылка, "ТипЦен, НоменклатурнаяГруппа");
Сообщить(Номенклатура.НоменклатурнаяГруппа);
 

свойства объекта значения реквизитов на клиенте

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2669    0    John_d    8    

54

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4600    atdonya    22    

45

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    3960    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2023    8813    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16143    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7242    quazare    8    

109
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. metmetmet 81 18.09.13 06:55 Сейчас в теме
А зачем изобретать велосипед, когда в типовых конфигурациях (например БП3.0) в общем модуле ОбщегоНазначения есть функция ЗначенияРеквизитовОбъекта?
2. amon_ra 54 18.09.13 08:39 Сейчас в теме
(1) metmetmet, не соглашусь. Есть еще нетиповые и кроме того не во всех типовых имеется.
13jaguar; +1 Ответить
5. metmetmet 81 18.09.13 08:59 Сейчас в теме
(2) amon_ra, Можно же из типовой скопировать и не придумывать ничего дополнительно.
Конечно использовать типовую функцию или писать самому, выбор исключительно каждого, я лишь хотел отметить что аналогичная функция уже присутствует в типовых конфигурация.
6. amon_ra 54 18.09.13 09:49 Сейчас в теме
(5) metmetmet, ну, если велосипед хорош, то можно и изобрести главное, что бы велосипед не превращался в в бульдозер с педалями)
13. Abadonna 3958 21.09.13 11:28 Сейчас в теме
(5)
Можно же из типовой скопировать и не придумывать ничего дополнительно.

А ты все типовые сидишь и внимательно изучаешь, чего они там понапихали?
14. metmetmet 81 21.09.13 11:44 Сейчас в теме
(13) Abadonna, я лишь подсказал где это уже реализовано, может еще что-то полезное почерпнут из типовых общих модулей. И отвечать мне в хамской манере совершенно не обязательно.
15. Abadonna 3958 21.09.13 11:46 Сейчас в теме
(14) metmetmet, кхм... а что тут хамского? на "ты"? так в форумах так обычно принято.
16. kostik_love 308 23.09.13 07:50 Сейчас в теме
(13) Abadonna, все типовые и не нужно- есть конфигурация- "Библиотека стандартных подсистем"- ее как раз таки необходимо и достаточно.
17. Abadonna 3958 23.09.13 08:04 Сейчас в теме
(16) kostik_love, дело привычки, но лично мне даже и туда влом лезть... Попадется на глаза - хорошо, не попадется - быстрее самому сварганить. Но, повторюсь - это кому как...
Лично меня еще с 7.7 просто бесит, например, разбор почтового адреса через поиск позиции запятой.
Сразу стал делать Адрес=СтрЗаменить(Адрес,",",Символы.ПС) /8.х/
7. Al-X 18.09.13 09:52 Сейчас в теме
(1) metmetmet, НУ во первых - про них (полезные процедуры и функции) надо знать. Во вторых, у меня несколько самописных конф, в них функции типовых конфигураций не предусмотрены. Да и описанная тут функция немного универсальна, т.к. не надо заполнять обязательный второй параметр (самое того для немного ленивых программистов ;) ).
Но все же думаю лучше бы использовать стандартную функцию. В ней используется запрос "ВЫБРАТЬ РАЗРЕШЕННЫЕ", а это будет правильнее, когда имеются всякие ограничения доступа по полям объектов.
8. nick-max 249 18.09.13 10:34 Сейчас в теме
(1)(6)(7)
не знал про ЗначенияРеквизитовОбъекта, сейчас посмотрел ее в типовой бухгалтерии 2.0
Там нет конструкции ВЫБРАТЬ РАЗРЕШЕННЫЕ и второй параметр обязателен к заполнению. Так что можно считать, что я изобрел облегченный велосипед)
adhocprog; amon_ra; +2 Ответить
9. Al-X 18.09.13 11:03 Сейчас в теме
(8) это показывает, что так называемые стандартные функции и процедуры в каждой типовой конфигурации как бы НЕМНОГО свои для своей конфы !! (прикольно сказал !!! )
Вроде в БП не используются ограничения доступа на уровне записей, а в УПП во всю... Я смотрел в УПП 1.3.
Но все же стоит использовать "РАЗРЕШЕННЫЕ", хуже не будет.
3. metmetmet 81 18.09.13 08:57 Сейчас в теме
4. alsoftik 6 18.09.13 08:59 Сейчас в теме
У меня примерно такая же была написана, но еще добавлен поиск по дополнительным свойствам.
10. AlX0id 18.09.13 14:32 Сейчас в теме
КоллекцияРеквизитов = Объект.Метаданные().Реквизиты;
КоллекцияСтандартныхРеквизитов = Объект.Метаданные().СтандартныеРеквизиты;

Зачем это вне "Если"?
nick-max; +1 Ответить
11. juntatalor 63 20.09.13 10:03 Сейчас в теме
Не все так просто, как кажется.

Во-первых, при многократных вызовах, лучше не обращаться к Метаданные(). В этом плане как раз лучше использовать запрос, как в типовых (кстати, это также гарантирует, что если кто-то изменил объект, пока вы с ним работаете, то вы получите актуальные данные).

Во-вторых, в вашем варианте нельзя (не задав второй параметр) получить РеквизитыАдресации для задач, а также ПризнакиУчета для плана счетов.

В-третьих, для использования Метаданные() у пользователя должны быть определенные права, которые ДАЛЕКО не всегда желательно давать.
12. banco 20.09.13 23:26 Сейчас в теме
1. Зачем в "Если Свойства = "" Тогда" опять, в цикле, проверять "Свойства = ?(Свойства = "", Реквизит.Имя, Свойства + ", " + Реквизит.Имя);"
2. также для получения одного реквизита, ты получаешь весь объект из базы целиком, вместе с его табличными частями.
3. открой для себя "Библиотеку стандартных подсистем", сэкономишь много времени
18. kiruha 388 23.09.13 11:04 Сейчас в теме
Удобно конечно - но пропадает смысл ручного разделения на клиентский и серверный код
Если бы в 1С хотели - могли бы все функции реализовать путем вызова серверного кода

Т.е. при большом количестве таких функций вполне потом может быть такой код
//... на клиенте
Контрагент = СвойстваОбъекта(КонтрагентСсылка);
Склад=СвойстваОбъекта(СкладСсылка);
Фирма=СвойстваОбъекта(ОрганизацияСсылка);
Договор=СвойстваОбъекта(ДоговорСсылка);
//....
19. Danil.Potapov 514 23.09.13 11:36 Сейчас в теме
страшная вещь, так как в случае обращения к любому свойству ссылочного объекта из базы потащится весь объект, в том числе и с табличными частями. Поэтому лучше делать как это реализовано в БСП - через запрос.
20. Stepa86 1521 01.10.13 14:24 Сейчас в теме
1) Если чо, вся функция УстановитьВидимость() должна быть на сервере, а то в одной простой клиентской функции 3 вызова сервера: для получения данных, для получения предопределенного значения и для изменения видимости

2) Давно имею набор модулей, которые реализуют мне методы глРеквизит(), глРеквизиты(), глРеквизитыКэш(), глРеквизитыКэшНаСеанс() - аналог типовой ЗначениеРеквизитаОбъекта(), только с обработкой исключений, возможностью получать через точки, возможностью получать от объекта и еще там чо то...
Оставьте свое сообщение