Здравствуйте. Спецы, что не так с кодом?

1. VID1234 145 28.07.20 08:47 Сейчас в теме
Всех приветствую. Мужики подскажите есть такой код в форме документа ЗаказКлиенту Процедура УстановитьУсловноеОформление
Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыНоменклатура.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ВесЧ.ВесЧислитель");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	ОтборЭлемента.Использование = Истина;
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Аквамарин);

Показать

я создал поле на форме, куда из справочника номенклатура выводится вес (Числитель), так вот с помощью кода, я хочу, чтобы в том товаре где не заполнен вес, фон строки становится иным от белого, но получается, что окрашиваются все строки, не зависимо от заполнения, как будто бы все заполнено, но при этом в колонке видно что вес не заполнен.
Прикрепленные файлы:
Найденные решения
22. antz 28.07.20 11:00 Сейчас в теме
(21) В дереве реквизитов формы раскрыть реквизит Объект, найти ТЧ Товары, на нем ПКМ - добавить колонку реквизита, колонку назвать "ВесЗаполнен", тип - булево.
В процедуру ПриСозданииНаСервере дописать:

Для каждого ТекСтрока из Объект.Товары Цикл
    ТекСтрока.ВесЗаполнен = ТекСтрока.Номенклатура.ВесЧислитель <> 0
КонецЦикла;


В обработчик события ТоварыНоменклатураПриИзменении дописать:

ТекДанные = Элементы.Товары.ТекущиеДанные;
ТекДанные.ВесЗаполнен = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ТекДанные.Номенклатура, "ВесЧислитель") <> 0;

В условное оформление добавить окраску фона по полю "ВесЗаполнен".
24. antz 28.07.20 11:22 Сейчас в теме
(23) Ну тогда

ТекДанные.ВесЗаполнен = ПолучитьЗначениеРеквизита(ТекДанные.Номенклатура, "ВесЧислитель") <> 0;


В модуль добавить функцию

&НаСервере
Функция ПолучитьЗначениеРеквизита(Ссылка, ИмяРеквизита)
    Возврат Ссылка[ИмяРеквизита]
КонецФункции
53. antz 28.07.20 12:53 Сейчас в теме
(52)

Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.VID_ВесЗаполнен")
Прикрепленные файлы:
УсловноеОформление.epf
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 28.07.20 08:57 Сейчас в теме
(1)
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;

Поэтому окрашиваются все.

Так понимаю, нужно сделать:

ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
6. VID1234 145 28.07.20 09:06 Сейчас в теме
(2) Блин да я вчера вечером колдовал и вставил последний код, сейчас исправил, но толку нет, тоже самое. Может я поле не правильно добавил? Я добавил Реквизит ВесЧ в табличную часть Товары, ссылка этого реквизита на справочник Номенклатура, дальше на форме создал поле и ссылку на созданный реквизит, Объект.Товары.ВесЧ.ВесЧислитель
3. M_A_D 184 28.07.20 08:57 Сейчас в теме
Нужно условие-то написать....
Если Объект.Товары.ВесЧ > 0 тогда окрасить конец если
7. VID1234 145 28.07.20 09:07 Сейчас в теме
(3) а код поймет команду окрасить?
8. M_A_D 184 28.07.20 09:11 Сейчас в теме
(7)
это упрощенно нписано)))

Если
ПолеКомпоновкиДанных("Объект.Товары.ВесЧ.ВесЧислитель") > 0 тогда

Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Аквамарин);
конецесли;

Как-то так должно получиться
10. VID1234 145 28.07.20 09:23 Сейчас в теме
(8)
Если
ПолеКомпоновкиДанных("Объект.Товары.ВесЧ.ВесЧислитель") > 0 тогда

Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Аквамарин);
конецесли;

{VID Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(157,1)}: Процедура или функция с указанным именем не определена (ПолеКомпоновкиДанных)
<<?>>ПолеКомпоновкиДанных("Объект.Товары.ВесЧ.ВесЧислитель") > 0 тогда (Проверка: Сервер)
4. zarankony 308 28.07.20 08:57 Сейчас в теме
Попробуйте по условию больше 0
5. Albert_2008 28.07.20 09:05 Сейчас в теме
По идее наверное так:
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 0;
SlavaKron; +1 Ответить
9. platonov.e 159 28.07.20 09:21 Сейчас в теме
А может сделать не кодом, а в свойства условное оформление формы? Тут можно типы напутать, поля, а там выбрать руками
11. VID1234 145 28.07.20 09:24 Сейчас в теме
(9) не получается, я пробовал. Но увы, вообще ничего не происходит, даже не окрашивается
12. platonov.e 159 28.07.20 09:38 Сейчас в теме
(11) Вы что то не правильно делаете. Покажите как в свойствах делали
13. VID1234 145 28.07.20 09:58 Сейчас в теме
(12)
Прикрепленные файлы:
15. platonov.e 159 28.07.20 10:12 Сейчас в теме
(13) В оформляемых полях нужно выбрать конкретный столбец.
14. VID1234 145 28.07.20 09:59 Сейчас в теме
(12) Может я поле неправильно создал?
17. platonov.e 159 28.07.20 10:41 Сейчас в теме
(14) и еще если там тип число, то условия сделайте равно 0
20. VID1234 145 28.07.20 10:52 Сейчас в теме
(17) У меня есть колонка с заголовком VID_Вес товара, а имя ТоварыВесЧ, ссылка этой колонки Объект.Товары.Номенклатура.ВесЧислитель. на форме она (колонка) отображается! значения показывает, если заполнено конечно. Так вот как мне прописать ее в коде, чтобы условие срабатывало именно по ней
16. antz 28.07.20 10:39 Сейчас в теме
Добавьте в табличную часть "Товары" реквизита формы "Объект" колонку с типом булево, при изменении номенклатуры пишите туда ложь если вес товара заполнен и истину - если нет. Заполняйте ее также при открытии. По ней красьте строки.
18. VID1234 145 28.07.20 10:43 Сейчас в теме
(16) знать бы как это прописать в коде, с удовольствием бы сделал, сделать реквизит не проблема, а вот прописать, с этим у меня еще сложности
19. antz 28.07.20 10:51 Сейчас в теме
(18) ВесЧ - это вообще что? Реквизит справочника Номенклатура? Табличная часть справочника Номенклатура?
21. VID1234 145 28.07.20 10:52 Сейчас в теме
(19)У меня есть колонка с заголовком VID_Вес товара, а имя ТоварыВесЧ, ссылка этой колонки Объект.Товары.Номенклатура.ВесЧислитель. на форме она (колонка) отображается! значения показывает, если заполнено конечно. Так вот как мне прописать ее в коде, чтобы условие срабатывало именно по ней
22. antz 28.07.20 11:00 Сейчас в теме
(21) В дереве реквизитов формы раскрыть реквизит Объект, найти ТЧ Товары, на нем ПКМ - добавить колонку реквизита, колонку назвать "ВесЗаполнен", тип - булево.
В процедуру ПриСозданииНаСервере дописать:

Для каждого ТекСтрока из Объект.Товары Цикл
    ТекСтрока.ВесЗаполнен = ТекСтрока.Номенклатура.ВесЧислитель <> 0
КонецЦикла;


В обработчик события ТоварыНоменклатураПриИзменении дописать:

ТекДанные = Элементы.Товары.ТекущиеДанные;
ТекДанные.ВесЗаполнен = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ТекДанные.Номенклатура, "ВесЧислитель") <> 0;

В условное оформление добавить окраску фона по полю "ВесЗаполнен".
23. VID1234 145 28.07.20 11:13 Сейчас в теме
(22)
ТекДанные = Элементы.Товары.ТекущиеДанные;
ТекДанные.ВесЗаполнен = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ТекДанные.Номенклатура, "ВесЧислитель") <> 0;

{Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(1395,29)}: Переменная не определена (ОбщегоНазначения)
ТекДанные.ВесЗаполнен = <<?>>ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ТекДанные.Номенклатура, "ВесЧислитель") <> 0; (Проверка: Тонкий клиент)
24. antz 28.07.20 11:22 Сейчас в теме
(23) Ну тогда

ТекДанные.ВесЗаполнен = ПолучитьЗначениеРеквизита(ТекДанные.Номенклатура, "ВесЧислитель") <> 0;


В модуль добавить функцию

&НаСервере
Функция ПолучитьЗначениеРеквизита(Ссылка, ИмяРеквизита)
    Возврат Ссылка[ИмяРеквизита]
КонецФункции
26. VID1234 145 28.07.20 11:27 Сейчас в теме
(24)
&НаСервере
Функция ПолучитьЗначениеРеквизита(Ссылка, ИмяРеквизита)
Возврат Ссылка[ИмяРеквизита]
КонецФункции

В модуль формы или документа?
27. antz 28.07.20 11:28 Сейчас в теме
28. VID1234 145 28.07.20 11:33 Сейчас в теме
(27)
{Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(1396,29)}: Переменная не определена (ОбщегоНазначения)
ТекДанные.VID_ВесЗаполнен = <<?>>ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Номенклатура, "ВесЧислитель") <> 0; (Проверка: Тонкий клиент)
{Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(1396,72)}: Переменная не определена (Номенклатура)
ТекДанные.VID_ВесЗаполнен = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(<<?>>Номенклатура, "ВесЧислитель") <> 0; (Проверка: Тонкий клиент)

ТАКЖЕ!
29. VID1234 145 28.07.20 11:36 Сейчас в теме
(28)
Прикрепленные файлы:
30. antz 28.07.20 11:36 Сейчас в теме
(28) ОбщегоНазначения - это название общего модуля. В конфигурации есть общий модуль под названием ОбщегоНазначения?

Что за переменная Номенклатура? Откуда она взялась?
34. VID1234 145 28.07.20 11:41 Сейчас в теме
(30) Да есть и он ссылается на него при нажатии F12
31. VID1234 145 28.07.20 11:37 Сейчас в теме
(28)
Прикрепленные файлы:
32. VID1234 145 28.07.20 11:38 Сейчас в теме
(28)
Прикрепленные файлы:
33. VID1234 145 28.07.20 11:40 Сейчас в теме
(28)
Прикрепленные файлы:
35. antz 28.07.20 11:44 Сейчас в теме
(33) Значит, он серверный. Плюньте на него и сделайте как в (24)
36. VID1234 145 28.07.20 11:49 Сейчас в теме
(35) о сейчас норм, а В условное оформление добавить окраску фона по полю "ВесЗаполнен", делать в Процедура УстановитьУсловноеОформление(
37. VID1234 145 28.07.20 11:57 Сейчас в теме
(35){Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(167)}: Поле объекта не обнаружено (VID_ВесЗаполнен)
ТекСтрока.VID_ВесЗаполнен = ТекСтрока.Номенклатура.ВесЧислитель <> 0
при открытии Заказа в 1с
38. antz 28.07.20 12:02 Сейчас в теме
(37) Реквизит-то в табличную часть добавил? Покажи скриншот.
39. VID1234 145 28.07.20 12:04 Сейчас в теме
(38)
Прикрепленные файлы:
40. antz 28.07.20 12:05 Сейчас в теме
(39) Это не реквизит табличной части.
42. VID1234 145 28.07.20 12:06 Сейчас в теме
(40)так все по инструкции сделал, нужно было в ветку конфигурации сделать реквизит чтоли?
44. antz 28.07.20 12:07 Сейчас в теме
(42) В инструкции сказано: "найти ТЧ Товары, на нем ПКМ - добавить колонку реквизита".
43. VID1234 145 28.07.20 12:06 Сейчас в теме
(40)Вот Ваша инструкция
дереве реквизитов формы раскрыть реквизит Объект, найти ТЧ Товары, на нем ПКМ - добавить колонку реквизита, колонку назвать "ВесЗаполнен", тип - булево.
В процедуру ПриСозданииНаСервере дописать:
45. VID1234 145 28.07.20 12:07 Сейчас в теме
(43) блин колонку реквизита
46. antz 28.07.20 12:08 Сейчас в теме
(43) Выглядеть он должен так:
Прикрепленные файлы:
41. antz 28.07.20 12:06 Сейчас в теме
(39)
Прикрепленные файлы:
47. VID1234 145 28.07.20 12:10 Сейчас в теме
(41) Перемещать на форму нужно или не обязательно
Прикрепленные файлы:
48. antz 28.07.20 12:11 Сейчас в теме
(47) На форме он не нужен, он нужен для условного оформления.
49. VID1234 145 28.07.20 12:15 Сейчас в теме
(48)Ок. Но условное оформление все равно не работает, хотя значения заполняются(((
 Оформление  = УсловноеОформление.Элементы.Добавить();
 Оформление.Использование = Истина;
 //// VID(
 //Для табличных частей нужно указывать оформляемые поля в ручную.
 Поле = Оформление.Поля.Элементы.Добавить();
 Поле.Поле = Новый ПолеКомпоновкиДанных("ТоварыНоменклатура");
 Отбор = Оформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
 Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("VID_ВесЗаполнен");// неопбходимо обращаться к объекту формы!
 Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
 Отбор.Использование = Истина;
 Оформление.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Аквамарин);
Показать
Прикрепленные файлы:
50. antz 28.07.20 12:17 Сейчас в теме
(49)

Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Отбор.ПравоеЗначение = Ложь;
51. VID1234 145 28.07.20 12:18 Сейчас в теме
(50) ок, тоже додумался до этого, сейчас обновляю
52. VID1234 145 28.07.20 12:21 Сейчас в теме
Вообще не заполняет
 Оформление  = УсловноеОформление.Элементы.Добавить();
 Оформление.Использование = Истина;
 //// VID(
 //Для табличных частей нужно указывать оформляемые поля в ручную.
 Поле = Оформление.Поля.Элементы.Добавить();
 Поле.Поле = Новый ПолеКомпоновкиДанных("ТоварыНоменклатура");
 Отбор = Оформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
 Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("VID_ВесЗаполнен");// неопбходимо обращаться к объекту формы!
 Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
 Отбор.ПравоеЗначение = Ложь; 
 //Отбор.Использование = Истина;
 Оформление.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Аквамарин)
Показать
Прикрепленные файлы:
53. antz 28.07.20 12:53 Сейчас в теме
(52)

Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.VID_ВесЗаполнен")
Прикрепленные файлы:
УсловноеОформление.epf
54. VID1234 145 28.07.20 13:20 Сейчас в теме
(53)
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.VID_ВесЗаполнен")

Спасибо все получилось!
25. VID1234 145 28.07.20 11:25 Сейчас в теме
(22)
ТекДанные = Элементы.Товары.ТекущиеДанные;
ТекДанные.ВесЗаполнен = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ТекДанные.Номенклатура, "ВесЧислитель") <> 0;

(24)
ТекДанные.ВесЗаполнен = ПолучитьЗначениеРеквизита(ТекДанные.Номенклатура, "ВесЧислитель") <> 0;


Функция ЗначенияРеквизитовОбъекта(Ссылка, Знач Реквизиты, ВыбратьРазрешенные = Ложь) Экспорт
	
	// Если передано имя предопределенного. 
	Если ТипЗнч(Ссылка) = Тип("Строка") Тогда 
		
		ПолноеИмяПредопределенногоЭлемента = Ссылка;
		
		// Вычисление ссылки по имени предопределенного.
		// - дополнительно выполняет проверку метаданных предопределенного, выполняется предварительно.
		Попытка
			Ссылка = ПредопределенныйЭлемент(ПолноеИмяПредопределенногоЭлемента);
		Исключение
			ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Неверный первый параметр Ссылка в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта:
			           |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
			ВызватьИсключение ТекстОшибки;
		КонецПопытки;
		
		// Разбор полного имени предопределенного.
		ЧастиПолногоИмени = СтрРазделить(ПолноеИмяПредопределенногоЭлемента, ".");
		ПолноеИмяОбъектаМетаданных = ЧастиПолногоИмени[0] + "." + ЧастиПолногоИмени[1];
		
		// Если предопределенный не создан в ИБ, то требуется выполнить проверку доступа к объекту.
		// В других сценариях проверка доступа выполняется в момент исполнения запроса.
		Если Ссылка = Неопределено Тогда 
			МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных);
			Если Не ПравоДоступа("Чтение", МетаданныеОбъекта) Тогда 
				ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
						НСтр("ru = 'Недостаточно прав для работы с таблицей ""%1""'"), ПолноеИмяОбъектаМетаданных);
			КонецЕсли;
		КонецЕсли;
		
	Иначе // Если передана ссылка.
		
		Попытка
			ПолноеИмяОбъектаМетаданных = Ссылка.Метаданные().ПолноеИмя(); 
		Исключение
			ВызватьИсключение 
				НСтр("ru = 'Неверный первый параметр Ссылка в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта: 
				           |- Значение должно быть ссылкой или именем предопределенного элемента'");
		КонецПопытки;
		
	КонецЕсли;
	
	// Разбор реквизитов, если второй параметр Строка.
	Если ТипЗнч(Реквизиты) = Тип("Строка") Тогда
		Если ПустаяСтрока(Реквизиты) Тогда
			Возврат Новый Структура;
		КонецЕсли;
		
		// Удаление пробелов.
		Реквизиты = СтрЗаменить(Реквизиты, " ", "");
		// Преобразование параметра в массив полей.
		Реквизиты = СтрРазделить(Реквизиты, ",");
	КонецЕсли;
	
	// Приведение реквизитов к единому формату.
	СтруктураПолей = Новый Структура;
	Если ТипЗнч(Реквизиты) = Тип("Структура")
		Или ТипЗнч(Реквизиты) = Тип("ФиксированнаяСтруктура") Тогда
		
		СтруктураПолей = Реквизиты;
		
	ИначеЕсли ТипЗнч(Реквизиты) = Тип("Массив")
		Или ТипЗнч(Реквизиты) = Тип("ФиксированныйМассив") Тогда
		
		Для Каждого Реквизит Из Реквизиты Цикл
			
			Попытка
				ПсевдонимПоля = СтрЗаменить(Реквизит, ".", "");
				СтруктураПолей.Вставить(ПсевдонимПоля, Реквизит);
			Исключение 
				// Если псевдоним не является ключом.
				
				// Поиск ошибки доступности полей.
				Результат = НайтиОшибкуДоступностиРеквизитовОбъекта(ПолноеИмяОбъектаМетаданных, Реквизиты);
				Если Результат.Ошибка Тогда 
					ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
						НСтр("ru = 'Неверный второй параметр Реквизиты в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта: %1'"),
						Результат.ОписаниеОшибки);
				КонецЕсли;
				
				// Не удалось распознать ошибку, проброс первичной ошибки.
				ВызватьИсключение;
			
			КонецПопытки;
		КонецЦикла;
	Иначе
		ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Неверный тип второго параметра Реквизиты в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта: %1'"), 
			Строка(ТипЗнч(Реквизиты)));
	КонецЕсли;
	
	// Подготовка результата (после выполнения запроса переопределится).
	Результат = Новый Структура;
	
	// Формирование текста запроса к выбираемым полям.
	ТекстЗапросаПолей = "";
	Для каждого КлючИЗначение Из СтруктураПолей Цикл
		
		ИмяПоля = ?(ЗначениеЗаполнено(КлючИЗначение.Значение),
						КлючИЗначение.Значение,
						КлючИЗначение.Ключ);
		ПсевдонимПоля = КлючИЗначение.Ключ;
		
		ТекстЗапросаПолей = 
			ТекстЗапросаПолей + ?(ПустаяСтрока(ТекстЗапросаПолей), "", ",") + "
			|	" + ИмяПоля + " КАК " + ПсевдонимПоля;
		
		
		// Предварительное добавление поля по псевдониму в возвращаемый результат.
		Результат.Вставить(ПсевдонимПоля);
		
	КонецЦикла;
	
	// Если предопределенного нет в ИБ.
	// - приведение результата к отсутствию объекта в ИБ или передаче пустой ссылки.
	Если Ссылка = Неопределено Тогда 
		Возврат Результат;
	КонецЕсли;
	
	ТекстЗапроса = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|&ТекстЗапросаПолей
		|ИЗ
		|	&ПолноеИмяОбъектаМетаданных КАК Таблица
		|ГДЕ
		|	Таблица.Ссылка = &Ссылка";
	
	Если Не ВыбратьРазрешенные Тогда 
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "РАЗРЕШЕННЫЕ", "");
	КонецЕсли;
	
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаПолей", ТекстЗапросаПолей);
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяОбъектаМетаданных", ПолноеИмяОбъектаМетаданных);
	
	// Выполнение запроса.
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Ссылка", Ссылка);
	Запрос.Текст = ТекстЗапроса;
	
	Попытка
		Выборка = Запрос.Выполнить().Выбрать();
	Исключение
		
		// Если реквизиты были переданы строкой, то они уже конвертированы в массив.
		// Если реквизиты - массив, оставляем без изменений.
		// Если реквизиты - структура - конвертируем в массив.
		// В остальных случаях уже было бы выброшено исключение.
		Если Тип("Структура") = ТипЗнч(Реквизиты) Тогда
			Реквизиты = Новый Массив;
			Для каждого КлючИЗначение Из СтруктураПолей Цикл
				ИмяПоля = ?(ЗначениеЗаполнено(КлючИЗначение.Значение),
							КлючИЗначение.Значение,
							КлючИЗначение.Ключ);
				Реквизиты.Добавить(ИмяПоля);
			КонецЦикла;
		КонецЕсли;
		
		// Поиск ошибки доступности полей.
		Результат = НайтиОшибкуДоступностиРеквизитовОбъекта(ПолноеИмяОбъектаМетаданных, Реквизиты);
		Если Результат.Ошибка Тогда 
			ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Неверный второй параметр Реквизиты в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта: %1'"), 
				Результат.ОписаниеОшибки);
		КонецЕсли;
		
		// Не удалось распознать ошибку, проброс первичной ошибки.
		ВызватьИсключение;
		
	КонецПопытки;
	
	// Заполнение реквизитов.
	Если Выборка.Следующий() Тогда
		ЗаполнитьЗначенияСвойств(Результат, Выборка);
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

// Возвращает значения реквизита, прочитанного из информационной базы по ссылке на объект.
// Рекомендуется использовать вместо обращения к реквизитам объекта через точку от ссылки на объект
// для быстрого чтения отдельных реквизитов объекта из базы данных.
//
// Если необходимо зачитать реквизит независимо от прав текущего пользователя,
// то следует использовать предварительный переход в привилегированный режим.
//
// Параметры:
//  Ссылка    - ЛюбаяСсылка - объект, значения реквизитов которого необходимо получить.
//            - Строка      - полное имя предопределенного элемента, значения реквизитов которого необходимо получить.
//  ИмяРеквизита       - Строка - имя получаемого реквизита.
//  ВыбратьРазрешенные - Булево - если Истина, то запрос к объекту выполняется с учетом прав пользователя;
//                                если есть ограничение на уровне записей, то возвращается Неопределено;
//                                если нет прав для работы с таблицей, то возникнет исключение;
//                                если Ложь, то возникнет исключение при отсутствии прав на таблицу
//                                или любой из реквизитов.
//
// Возвращаемое значение:
//  Произвольный - зависит от типа значения прочитанного реквизита.
//               - если в параметр Ссылка передана пустая ссылка, то возвращается Неопределено;
//               - если в параметр Ссылка передана ссылка несуществующего объекта (битая ссылка), 
//                 то возвращается Неопределено.
//
Функция ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита, ВыбратьРазрешенные = Ложь) Экспорт
	
	Если ПустаяСтрока(ИмяРеквизита) Тогда 
		ВызватьИсключение 
			НСтр("ru = 'Неверный второй параметр ИмяРеквизита в функции ОбщегоНазначения.ЗначениеРеквизитаОбъекта: 
			           |- Имя реквизита должно быть заполнено'");
	КонецЕсли;
	
	Результат = ЗначенияРеквизитовОбъекта(Ссылка, ИмяРеквизита, ВыбратьРазрешенные);
	Возврат Результат[СтрЗаменить(ИмяРеквизита, ".", "")];
	
КонецФункции 

// Возвращает значения реквизитов, прочитанные из информационной базы для нескольких объектов.
// Рекомендуется использовать вместо обращения к реквизитам объекта через точку от ссылки на объект
// для быстрого чтения отдельных реквизитов объекта из базы данных.
//
// Если необходимо зачитать реквизит независимо от прав текущего пользователя,
// то следует использовать предварительный переход в привилегированный режим.
//
// Параметры:
//  Ссылки - Массив, ФиксированныйМассив - ссылки на объекты.
//                    Если массив пуст, то результатом будет пустое соответствие.
//  Реквизиты - Строка - имена реквизитов перечисленные через запятую, в формате требований к свойствам
//                       структуры. Например, "Код, Наименование, Родитель".
//            - Массив, ФиксированныйМассив - имена реквизитов в формате требований
//                       к свойствам структуры.
//  ВыбратьРазрешенные - Булево - если Истина, то запрос к объектам выполняется с учетом прав пользователя;
//                                если какой-либо объект будет исключен из выборки по правам, то этот объект
//                                будет исключен и из результата;
//                                если Ложь, то возникнет исключение при отсутствии прав на таблицу
//                                или любой из реквизитов.
//
// Возвращаемое значение:
//  Соответствие - список объектов и значений их реквизитов:
//   * Ключ - ЛюбаяСсылка - ссылка на объект;
//   * Значение - Структура - значения реквизитов:
//    ** Ключ - Строка - имя реквизита;
//    ** Значение - Произвольный - значение реквизита.
// 
Функция ЗначенияРеквизитовОбъектов(Ссылки, Знач Реквизиты, ВыбратьРазрешенные = Ложь) Экспорт
	
	Если ТипЗнч(Реквизиты) = Тип("Массив") Или ТипЗнч(Реквизиты) = Тип("ФиксированныйМассив") Тогда
		Реквизиты = СтрСоединить(Реквизиты, ",");
	КонецЕсли;
	
	Если ПустаяСтрока(Реквизиты) Тогда 
		ВызватьИсключение 
			НСтр("ru = 'Неверный второй параметр Реквизиты в функции ОбщегоНазначения.ЗначенияРеквизитовОбъектов: 
			           |- Поле объекта должно быть указано'");
	КонецЕсли;
	
	Если СтрНайти(Реквизиты, ".") <> 0 Тогда 
		ВызватьИсключение 
			НСтр("ru = 'Неверный второй параметр Реквизиты в функции ОбщегоНазначения.ЗначенияРеквизитовОбъектов: 
			           |- Обращение через точку не поддерживается'");
	КонецЕсли;
	
	ЗначенияРеквизитов = Новый Соответствие;
	Если Ссылки.Количество() = 0 Тогда
		Возврат ЗначенияРеквизитов;
	КонецЕсли;
	
	СсылкиПоТипам = Новый Соответствие;
	Для Каждого Ссылка Из Ссылки Цикл
		Тип = ТипЗнч(Ссылка);
		Если СсылкиПоТипам[Тип] = Неопределено Тогда
			СсылкиПоТипам[Тип] = Новый Массив;
		КонецЕсли;
		СсылкиПоТипам[Тип].Добавить(Ссылка);
	КонецЦикла;
	
	ТекстыЗапросов = Новый Массив;
	ПараметрыЗапроса = Новый Структура;
	
	ИменаОбъектовМетаданных = Новый Массив;
	
	Для Каждого СсылкиПоТипу Из СсылкиПоТипам Цикл
		Тип = СсылкиПоТипу.Ключ;
	
		Попытка
			ПолноеИмяОбъектаМетаданных = Метаданные.НайтиПоТипу(Тип).ПолноеИмя();
		Исключение
			ВызватьИсключение 
				НСтр("ru = 'Неверный первый параметр Ссылки в функции ОбщегоНазначения.ЗначенияРеквизитовОбъектов: 
				           |- Значения массива должны быть ссылками'");
		КонецПопытки;
		ИменаОбъектовМетаданных.Добавить(ПолноеИмяОбъектаМетаданных);
		
		ТекстЗапроса =
			"ВЫБРАТЬ РАЗРЕШЕННЫЕ
			|	Ссылка,
			|	&Реквизиты
			|ИЗ
			|	&ПолноеИмяОбъектаМетаданных КАК Таблица
			|ГДЕ
			|	Таблица.Ссылка В (&Ссылки)";
	
		Если Не ВыбратьРазрешенные Или ТекстыЗапросов.Количество() > 0 Тогда
			ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "РАЗРЕШЕННЫЕ", "");
		КонецЕсли;
	
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Реквизиты", Реквизиты);
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяОбъектаМетаданных", ПолноеИмяОбъектаМетаданных);
		ИмяПараметра = "Ссылки" + СтрЗаменить(ПолноеИмяОбъектаМетаданных, ".", "");
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Ссылки", "&" + ИмяПараметра);
		ПараметрыЗапроса.Вставить(ИмяПараметра, СсылкиПоТипу.Значение);
		
		ТекстыЗапросов.Добавить(ТекстЗапроса);
	КонецЦикла;
	
	ТекстЗапроса = СтрСоединить(ТекстыЗапросов, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС);
	
	Запрос = Новый Запрос(ТекстЗапроса);
	Для Каждого Параметр Из ПараметрыЗапроса Цикл
		Запрос.УстановитьПараметр(Параметр.Ключ, Параметр.Значение);
	КонецЦикла;
	
	Попытка
		Выборка = Запрос.Выполнить().Выбрать();
	Исключение
		
		// Удаление пробелов.
		Реквизиты = СтрЗаменить(Реквизиты, " ", "");
		// Преобразование параметра в массив полей.
		Реквизиты = СтрРазделить(Реквизиты, ",");
		
		// Поиск ошибки доступности полей.
		СписокОшибок = Новый Массив;
		Для Каждого ПолноеИмяОбъектаМетаданных Из ИменаОбъектовМетаданных Цикл
			Результат = НайтиОшибкуДоступностиРеквизитовОбъекта(ПолноеИмяОбъектаМетаданных, Реквизиты);
			Если Результат.Ошибка Тогда 
				СписокОшибок.Добавить(Результат.ОписаниеОшибки);
			КонецЕсли;
		КонецЦикла;
		
		Если ЗначениеЗаполнено(СписокОшибок) Тогда
			ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Неверный второй параметр Реквизиты в функции ОбщегоНазначения.ЗначенияРеквизитовОбъектов: %1'"), 
				СтрСоединить(СписокОшибок, Символы.ПС));
		КонецЕсли;
		
		// Не удалось распознать ошибку, проброс первичной ошибки.
		ВызватьИсключение;
		
	КонецПопытки;
	
	Пока Выборка.Следующий() Цикл
		Результат = Новый Структура(Реквизиты);
		ЗаполнитьЗначенияСвойств(Результат, Выборка);
		ЗначенияРеквизитов[Выборка.Ссылка] = Результат;
	КонецЦикла;
	
	Возврат ЗначенияРеквизитов;
	
КонецФункции

// Возвращает значения реквизита, прочитанного из информационной базы для нескольких объектов.
// Рекомендуется использовать вместо обращения к реквизитам объекта через точку от ссылки на объект
// для быстрого чтения отдельных реквизитов объекта из базы данных.
//
// Если необходимо зачитать реквизит независимо от прав текущего пользователя,
// то следует использовать предварительный переход в привилегированный режим.
//
// Параметры:
//  МассивСсылок       - Массив - массив ссылок на объекты.
//  ИмяРеквизита       - Строка - например, "Код".
//  ВыбратьРазрешенные - Булево - если Истина, то запрос к объектам выполняется с учетом прав пользователя;
//                                если какой-либо объект будет исключен из выборки по правам, то этот объект
//                                будет исключен и из результата;
//                                если Ложь, то возникнет исключение при отсутствии прав на таблицу
//                                или любой из реквизитов.
//
// Возвращаемое значение:
//  Соответствие - Ключ - ссылка на объект, Значение - значение прочитанного реквизита.
//      * Ключ     - ссылка на объект, 
//      * Значение - значение прочитанного реквизита.
// 
Функция ЗначениеРеквизитаОбъектов(МассивСсылок, ИмяРеквизита, ВыбратьРазрешенные = Ложь) Экспорт
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот