Здравствуйте. Спецы, что не так с кодом?
Всех приветствую. Мужики подскажите есть такой код в форме документа ЗаказКлиенту Процедура УстановитьУсловноеОформление
я создал поле на форме, куда из справочника номенклатура выводится вес (Числитель), так вот с помощью кода, я хочу, чтобы в том товаре где не заполнен вес, фон строки становится иным от белого, но получается, что окрашиваются все строки, не зависимо от заполнения, как будто бы все заполнено, но при этом в колонке видно что вес не заполнен.
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыНоменклатура.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ВесЧ.ВесЧислитель");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ОтборЭлемента.Использование = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Аквамарин);
Показатья создал поле на форме, куда из справочника номенклатура выводится вес (Числитель), так вот с помощью кода, я хочу, чтобы в том товаре где не заполнен вес, фон строки становится иным от белого, но получается, что окрашиваются все строки, не зависимо от заполнения, как будто бы все заполнено, но при этом в колонке видно что вес не заполнен.
Прикрепленные файлы:
![](/upload/forum/b3e/b3e8c8097b9f35fb118653b0984280b9.png)
Найденные решения
(21) В дереве реквизитов формы раскрыть реквизит Объект, найти ТЧ Товары, на нем ПКМ - добавить колонку реквизита, колонку назвать "ВесЗаполнен", тип - булево.
В процедуру ПриСозданииНаСервере дописать:
В обработчик события ТоварыНоменклатураПриИзменении дописать:
В условное оформление добавить окраску фона по полю "ВесЗаполнен".
В процедуру ПриСозданииНаСервере дописать:
Для каждого ТекСтрока из Объект.Товары Цикл
ТекСтрока.ВесЗаполнен = ТекСтрока.Номенклатура.ВесЧислитель <> 0
КонецЦикла;
В обработчик события ТоварыНоменклатураПриИзменении дописать:
ТекДанные = Элементы.Товары.ТекущиеДанные;
ТекДанные.ВесЗаполнен = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ТекДанные.Номенклатура, "ВесЧислитель") <> 0;
В условное оформление добавить окраску фона по полю "ВесЗаполнен".
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Блин да я вчера вечером колдовал и вставил последний код, сейчас исправил, но толку нет, тоже самое. Может я поле не правильно добавил? Я добавил Реквизит ВесЧ в табличную часть Товары, ссылка этого реквизита на справочник Номенклатура, дальше на форме создал поле и ссылку на созданный реквизит, Объект.Товары.ВесЧ.ВесЧислитель
(8)
{VID Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(157,1)}: Процедура или функция с указанным именем не определена (ПолеКомпоновкиДанных)
<<?>>ПолеКомпоновкиДанных("Объект.Товары.ВесЧ.ВесЧислитель") > 0 тогда (Проверка: Сервер)
Если
ПолеКомпоновкиДанных("Объект.Товары.ВесЧ.ВесЧислитель") > 0 тогда
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Аквамарин);
конецесли;
ПолеКомпоновкиДанных("Объект.Товары.ВесЧ.ВесЧислитель") > 0 тогда
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Аквамарин);
конецесли;
{VID Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(157,1)}: Процедура или функция с указанным именем не определена (ПолеКомпоновкиДанных)
<<?>>ПолеКомпоновкиДанных("Объект.Товары.ВесЧ.ВесЧислитель") > 0 тогда (Проверка: Сервер)
(17) У меня есть колонка с заголовком VID_Вес товара, а имя ТоварыВесЧ, ссылка этой колонки Объект.Товары.Номенклатура.ВесЧислитель. на форме она (колонка) отображается! значения показывает, если заполнено конечно. Так вот как мне прописать ее в коде, чтобы условие срабатывало именно по ней
Добавьте в табличную часть "Товары" реквизита формы "Объект" колонку с типом булево, при изменении номенклатуры пишите туда ложь если вес товара заполнен и истину - если нет. Заполняйте ее также при открытии. По ней красьте строки.
(19)У меня есть колонка с заголовком VID_Вес товара, а имя ТоварыВесЧ, ссылка этой колонки Объект.Товары.Номенклатура.ВесЧислитель. на форме она (колонка) отображается! значения показывает, если заполнено конечно. Так вот как мне прописать ее в коде, чтобы условие срабатывало именно по ней
(21) В дереве реквизитов формы раскрыть реквизит Объект, найти ТЧ Товары, на нем ПКМ - добавить колонку реквизита, колонку назвать "ВесЗаполнен", тип - булево.
В процедуру ПриСозданииНаСервере дописать:
В обработчик события ТоварыНоменклатураПриИзменении дописать:
В условное оформление добавить окраску фона по полю "ВесЗаполнен".
В процедуру ПриСозданииНаСервере дописать:
Для каждого ТекСтрока из Объект.Товары Цикл
ТекСтрока.ВесЗаполнен = ТекСтрока.Номенклатура.ВесЧислитель <> 0
КонецЦикла;
В обработчик события ТоварыНоменклатураПриИзменении дописать:
ТекДанные = Элементы.Товары.ТекущиеДанные;
ТекДанные.ВесЗаполнен = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ТекДанные.Номенклатура, "ВесЧислитель") <> 0;
В условное оформление добавить окраску фона по полю "ВесЗаполнен".
(22)
{Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(1395,29)}: Переменная не определена (ОбщегоНазначения)
ТекДанные.ВесЗаполнен = <<?>>ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ТекДанные.Номенклатура, "ВесЧислитель") <> 0; (Проверка: Тонкий клиент)
ТекДанные = Элементы.Товары.ТекущиеДанные;
ТекДанные.ВесЗаполнен = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ТекДанные.Номенклатура, "ВесЧислитель") <> 0;
ТекДанные.ВесЗаполнен = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ТекДанные.Номенклатура, "ВесЧислитель") <> 0;
{Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(1395,29)}: Переменная не определена (ОбщегоНазначения)
ТекДанные.ВесЗаполнен = <<?>>ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ТекДанные.Номенклатура, "ВесЧислитель") <> 0; (Проверка: Тонкий клиент)
(27)
ТАКЖЕ!
{Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(1396,29)}: Переменная не определена (ОбщегоНазначения)
ТекДанные.VID_ВесЗаполнен = <<?>>ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Номенклатура, "ВесЧислитель") <> 0; (Проверка: Тонкий клиент)
{Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(1396,72)}: Переменная не определена (Номенклатура)
ТекДанные.VID_ВесЗаполнен = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(<<?>>Номенклатура, "ВесЧислитель") <> 0; (Проверка: Тонкий клиент)
ТАКЖЕ!
(48)Ок. Но условное оформление все равно не работает, хотя значения заполняются(((
Оформление = УсловноеОформление.Элементы.Добавить();
Оформление.Использование = Истина;
//// VID(
//Для табличных частей нужно указывать оформляемые поля в ручную.
Поле = Оформление.Поля.Элементы.Добавить();
Поле.Поле = Новый ПолеКомпоновкиДанных("ТоварыНоменклатура");
Отбор = Оформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("VID_ВесЗаполнен");// неопбходимо обращаться к объекту формы!
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Отбор.Использование = Истина;
Оформление.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Аквамарин);
ПоказатьПрикрепленные файлы:
![](/upload/forum/upload/612/6122e1da184d529534939693a8962c62.png)
Вообще не заполняет
Оформление = УсловноеОформление.Элементы.Добавить();
Оформление.Использование = Истина;
//// VID(
//Для табличных частей нужно указывать оформляемые поля в ручную.
Поле = Оформление.Поля.Элементы.Добавить();
Поле.Поле = Новый ПолеКомпоновкиДанных("ТоварыНоменклатура");
Отбор = Оформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("VID_ВесЗаполнен");// неопбходимо обращаться к объекту формы!
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Отбор.ПравоеЗначение = Ложь;
//Отбор.Использование = Истина;
Оформление.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Аквамарин)
ПоказатьПрикрепленные файлы:
![](/upload/forum/upload/c90/c9069a01e1a324f2df9c1d5641708e8e.png)
(22)
(24)
ТекДанные = Элементы.Товары.ТекущиеДанные;
ТекДанные.ВесЗаполнен = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ТекДанные.Номенклатура, "ВесЧислитель") <> 0;
ТекДанные.ВесЗаполнен = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ТекДанные.Номенклатура, "ВесЧислитель") <> 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'"),
СтрСоединить(СписокОшибок, Символы.ПС));
КонецЕсли;
// Не удалось распознать ошибку, проброс первичной ошибки.
ВызватьИсключение;
КонецПопытки;
Пока Выборка.Следующий() Цикл
Результат = Новый Структура(Реквизиты);
ЗаполнитьЗначенияСвойств(Результат, Выборка);
ЗначенияРеквизитов[Выборка.Ссылка] = Результат;
КонецЦикла;
Возврат ЗначенияРеквизитов;
КонецФункции
// Возвращает значения реквизита, прочитанного из информационной базы для нескольких объектов.
// Рекомендуется использовать вместо обращения к реквизитам объекта через точку от ссылки на объект
// для быстрого чтения отдельных реквизитов объекта из базы данных.
//
// Если необходимо зачитать реквизит независимо от прав текущего пользователя,
// то следует использовать предварительный переход в привилегированный режим.
//
// Параметры:
// МассивСсылок - Массив - массив ссылок на объекты.
// ИмяРеквизита - Строка - например, "Код".
// ВыбратьРазрешенные - Булево - если Истина, то запрос к объектам выполняется с учетом прав пользователя;
// если какой-либо объект будет исключен из выборки по правам, то этот объект
// будет исключен и из результата;
// если Ложь, то возникнет исключение при отсутствии прав на таблицу
// или любой из реквизитов.
//
// Возвращаемое значение:
// Соответствие - Ключ - ссылка на объект, Значение - значение прочитанного реквизита.
// * Ключ - ссылка на объект,
// * Значение - значение прочитанного реквизита.
//
Функция ЗначениеРеквизитаОбъектов(МассивСсылок, ИмяРеквизита, ВыбратьРазрешенные = Ложь) Экспорт
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот