Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.03 KB | None | 0 0
  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. КонецЕсли;
  37.  
  38. СтруктураРеквизитов = Новый Структура;
  39. Если ТипЗнч(Реквизиты) = Тип("Структура") Или ТипЗнч(Реквизиты) = Тип("ФиксированнаяСтруктура") Тогда
  40. СтруктураРеквизитов = Реквизиты;
  41. ИначеЕсли ТипЗнч(Реквизиты) = Тип("Массив") Или ТипЗнч(Реквизиты) = Тип("ФиксированныйМассив") Тогда
  42. Для Каждого Реквизит Из Реквизиты Цикл
  43. СтруктураРеквизитов.Вставить(СтрЗаменить(Реквизит, ".", ""), Реквизит);
  44. КонецЦикла;
  45. Иначе
  46. ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный тип второго параметра Реквизиты: %1'"), Строка(ТипЗнч(Реквизиты)));
  47. КонецЕсли;
  48.  
  49. ТекстПолей = "";
  50. Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
  51. ИмяПоля = ?(ЗначениеЗаполнено(КлючИЗначение.Значение),
  52. СокрЛП(КлючИЗначение.Значение),
  53. СокрЛП(КлючИЗначение.Ключ));
  54.  
  55. Псевдоним = СокрЛП(КлючИЗначение.Ключ);
  56.  
  57. ТекстПолей = ТекстПолей + ?(ПустаяСтрока(ТекстПолей), "", ",") + "
  58. | " + ИмяПоля + " КАК " + Псевдоним;
  59. КонецЦикла;
  60.  
  61. Запрос = Новый Запрос;
  62. Запрос.УстановитьПараметр("Ссылка", Ссылка);
  63. Запрос.Текст =
  64. "ВЫБРАТЬ
  65. |" + ТекстПолей + "
  66. |ИЗ
  67. | " + Ссылка.Метаданные().ПолноеИмя() + " КАК ПсевдонимЗаданнойТаблицы
  68. |ГДЕ
  69. | ПсевдонимЗаданнойТаблицы.Ссылка = &Ссылка
  70. |";
  71. Выборка = Запрос.Выполнить().Выбрать();
  72. Выборка.Следующий();
  73.  
  74. Результат = Новый Структура;
  75. Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
  76. Результат.Вставить(КлючИЗначение.Ключ);
  77. КонецЦикла;
  78. ЗаполнитьЗначенияСвойств(Результат, Выборка);
  79.  
  80. Возврат Результат;
  81.  
  82. КонецФункции
  83.  
  84. // Возвращает значение реквизита, прочитанного из информационной базы по ссылке на объект.
  85. //
  86. // Если доступа к реквизиту нет, возникнет исключение прав доступа.
  87. // Если необходимо зачитать реквизит независимо от прав текущего пользователя,
  88. // то следует использовать предварительный переход в привилегированный режим.
  89. //
  90. // Функция не предназначена для получения значений реквизитов пустых ссылок.
  91. //
  92. // Параметры:
  93. // Ссылка - ссылка на объект, - элемент справочника, документ, ...
  94. // ИмяРеквизита - Строка, например, "Код".
  95. //
  96. // Возвращаемое значение:
  97. // Произвольный - зависит от типа значения прочитанного реквизита.
  98. //
  99. Функция ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита) Экспорт
  100.  
  101. Результат = ЗначенияРеквизитовОбъекта(Ссылка, ИмяРеквизита);
  102. Возврат Результат[СтрЗаменить(ИмяРеквизита, ".", "")];
  103.  
  104. КонецФункции
  105.  
  106. // Возвращает значения реквизитов, прочитанные из информационной базы
  107. // для нескольких объектов.
  108. //
  109. // Если доступа к одному из реквизитов нет, возникнет исключение прав доступа.
  110. // Если необходимо зачитать реквизит независимо от прав текущего пользователя,
  111. // то следует использовать предварительный переход в привилегированный режим.
  112. //
  113. // Функция не предназначена для получения значений реквизитов пустых ссылок.
  114. //
  115. // Параметры:
  116. // МассивСсылок - массив ссылок на объекты одного типа.
  117. // ВАЖНО! значения массива должны быть ссылками на
  118. // объекты одного типа!
  119. // ИменаРеквизитов - Строка, имена реквизитов перечисленные через запятую,
  120. // в формате требований к свойствам структуры.
  121. // Например, "Код, Наименование, Родитель".
  122. //
  123. // Возвращаемое значение:
  124. // Соответствие - где ключ - ссылка на объект, а Значение - структура, которая
  125. // содержит список свойств, как список имен в строке.
  126. // ИменаРеквизитов, со значениям реквизитов, прочитанными из информационной базы.
  127. //
  128. Функция ЗначенияРеквизитовОбъектов(МассивСсылок, ИменаРеквизитов) Экспорт
  129.  
  130. ЗначенияРеквизитов = Новый Соответствие;
  131. Если МассивСсылок.Количество() = 0 Тогда
  132. Возврат ЗначенияРеквизитов;
  133. КонецЕсли;
  134.  
  135. Запрос = Новый Запрос;
  136. Запрос.Текст =
  137. "ВЫБРАТЬ
  138. | Ссылка КАК Ссылка, " + ИменаРеквизитов + "
  139. |ИЗ
  140. | " + МассивСсылок[0].Метаданные().ПолноеИмя() + " КАК Таблица
  141. |ГДЕ
  142. | Таблица.Ссылка В (&МассивСсылок)";
  143. Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
  144.  
  145. Выборка = Запрос.Выполнить().Выбрать();
  146. Пока Выборка.Следующий() Цикл
  147. Результат = Новый Структура(ИменаРеквизитов);
  148. ЗаполнитьЗначенияСвойств(Результат, Выборка);
  149. ЗначенияРеквизитов[Выборка.Ссылка] = Результат;
  150. КонецЦикла;
  151.  
  152. Возврат ЗначенияРеквизитов;
  153.  
  154. КонецФункции
  155.  
  156. // Возвращает значения реквизита, прочитанного из информационной базы для нескольких объектов.
  157. //
  158. // Если доступа к реквизиту нет, возникнет исключение прав доступа.
  159. // Если необходимо зачитать реквизит независимо от прав текущего пользователя,
  160. // то следует использовать предварительный переход в привилегированный режим.
  161. //
  162. // Функция не предназначена для получения значений реквизитов пустых ссылок.
  163. //
  164. // Параметры:
  165. // МассивСсылок - массив ссылок на объекты одного типа.
  166. // ВАЖНО! значения массива должны быть ссылками на
  167. // объекты одного типа!
  168. // ИмяРеквизита - Строка, например, "Код".
  169. //
  170. // Возвращаемое значение:
  171. // Соответствие - Ключ - ссылка на объект, Значение - значение прочитанного реквизита.
  172. //
  173. Функция ЗначениеРеквизитаОбъектов(МассивСсылок, ИмяРеквизита) Экспорт
  174.  
  175. ЗначенияРеквизитов = ЗначенияРеквизитовОбъектов(МассивСсылок, ИмяРеквизита);
  176. Для Каждого Элемент Из ЗначенияРеквизитов Цикл
  177. ЗначенияРеквизитов[Элемент.Ключ] = Элемент.Значение[ИмяРеквизита];
  178. КонецЦикла;
  179.  
  180. Возврат ЗначенияРеквизитов;
  181.  
  182. КонецФункции
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement