0
Гений 1С
гуру
22.09.22
✎
09:14
|
Есть таблица, строки Товар1, Товар2, ...
Колонки: Свойство1, Свойство2, ...
Тип колонки беру из Свойство.ТипЗначения (ПВХ).
Нужно отметить серым ячейки, у которых нельзя вводить значения, т.е. если у этого товара свойства нет.
Есть таблица содержащая допустимые свойства:
Товар, Свойство.
Как нарисовать условное оформление простейшим путем для этой схемы?
Сижу, туплю, ничего простого на ум не идет.
Может создать колонку невидимую СвойствоЕсть1, СвойствоЕсть2, и т.п.
И тогда УО такое: оформить Свойство1 = серое, если СвойствоЕсть1 = истина.
Так штолле?
|
|
5
Гений 1С
гуру
22.09.22
✎
12:00
|
(2) Здрасьте, приехали. В УТ 11.4 УправлениеСвойствамиСлужебный.ЗначенияСвойств
Кстати Нуф-Нуфу код должен понравиться, там применено спускание контента в стек через параметр сеанса.
&ИзменениеИКонтроль("ЗначенияСвойств")
Функция дор_ЗначенияСвойств(ДополнительныеСвойстваОбъекта, Наборы, ЭтоДополнительноеСведение)
Если ДополнительныеСвойстваОбъекта.Количество() = 0 Тогда
// Предварительная быстрая проверка использования дополнительных свойств.
СвойстваНеНайдены = ДополнительныеРеквизитыИСведенияНеНайдены(Наборы, ЭтоДополнительноеСведение);
Если СвойстваНеНайдены Тогда
ОписаниеСвойств = Новый ТаблицаЗначений;
ОписаниеСвойств.Колонки.Добавить("Набор");
ОписаниеСвойств.Колонки.Добавить("Свойство");
ОписаниеСвойств.Колонки.Добавить("ВладелецДополнительныхЗначений");
ОписаниеСвойств.Колонки.Добавить("ЗаполнятьОбязательно");
ОписаниеСвойств.Колонки.Добавить("Наименование");
ОписаниеСвойств.Колонки.Добавить("ТипЗначения");
ОписаниеСвойств.Колонки.Добавить("ФорматСвойства");
ОписаниеСвойств.Колонки.Добавить("МногострочноеПолеВвода");
ОписаниеСвойств.Колонки.Добавить("Удалено");
ОписаниеСвойств.Колонки.Добавить("Значение");
Возврат ОписаниеСвойств;
КонецЕсли;
КонецЕсли;
Свойства = ДополнительныеСвойстваОбъекта.ВыгрузитьКолонку("Свойство");
НаборыСвойств = Новый ТаблицаЗначений;
НаборыСвойств.Колонки.Добавить(
"Набор", Новый ОписаниеТипов("СправочникСсылка.НаборыДополнительныхРеквизитовИСведений"));
НаборыСвойств.Колонки.Добавить(
"ПорядокНабора", Новый ОписаниеТипов("Число"));
Для каждого ЭлементСписка Из Наборы Цикл
НоваяСтрока = НаборыСвойств.Добавить();
НоваяСтрока.Набор = ЭлементСписка.Значение;
НоваяСтрока.ПорядокНабора = Наборы.Индекс(ЭлементСписка);
КонецЦикла;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Свойства", Свойства);
Запрос.УстановитьПараметр("НаборыСвойств", НаборыСвойств);
Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык);
Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка);
Запрос.Текст =
"ВЫБРАТЬ
| НаборыСвойств.Набор КАК Набор,
| НаборыСвойств.ПорядокНабора КАК ПорядокНабора
|ПОМЕСТИТЬ НаборыСвойств
|ИЗ
| &НаборыСвойств КАК НаборыСвойств
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| НаборыСвойств.Набор КАК Набор,
| НаборыСвойств.ПорядокНабора КАК ПорядокНабора,
| СвойстваНаборов.Свойство КАК Свойство,
| СвойстваНаборов.ПометкаУдаления КАК ПометкаУдаления,
| СвойстваНаборов.НомерСтроки КАК ПорядокСвойства
|ПОМЕСТИТЬ СвойстваНаборов
|ИЗ
| НаборыСвойств КАК НаборыСвойств
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства
| ПО СвойстваНаборов.Свойство = Свойства.Ссылка
| ПО (СвойстваНаборов.Ссылка = НаборыСвойств.Набор)
|ГДЕ
| НЕ СвойстваНаборов.ПометкаУдаления
| И НЕ Свойства.ПометкаУдаления
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Свойства.Ссылка КАК Свойство
|ПОМЕСТИТЬ ЗаполненныеСвойства
|ИЗ
| ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства
|ГДЕ
| Свойства.Ссылка В(&Свойства)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СвойстваНаборов.Набор КАК Набор,
| СвойстваНаборов.ПорядокНабора КАК ПорядокНабора,
| СвойстваНаборов.Свойство КАК Свойство,
| СвойстваНаборов.ПорядокСвойства КАК ПорядокСвойства,
| СвойстваНаборов.ПометкаУдаления КАК Удалено
|ПОМЕСТИТЬ ВсеСвойства
|ИЗ
| СвойстваНаборов КАК СвойстваНаборов
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка),
| 0,
| ЗаполненныеСвойства.Свойство,
| 0,
| ИСТИНА
|ИЗ
| ЗаполненныеСвойства КАК ЗаполненныеСвойства
| ЛЕВОЕ СОЕДИНЕНИЕ СвойстваНаборов КАК СвойстваНаборов
| ПО ЗаполненныеСвойства.Свойство = СвойстваНаборов.Свойство
|ГДЕ
| СвойстваНаборов.Свойство ЕСТЬ NULL
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВсеСвойства.Набор КАК Набор,
| ВсеСвойства.Свойство КАК Свойство,
| ДополнительныеРеквизитыИСведения.ВладелецДополнительныхЗначений КАК ВладелецДополнительныхЗначений,
| ДополнительныеРеквизитыИСведения.ЗаполнятьОбязательно КАК ЗаполнятьОбязательно,
| ВЫБОР
| КОГДА &ЭтоОсновнойЯзык
| ТОГДА ДополнительныеРеквизитыИСведения.Заголовок
| ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Заголовок, ДополнительныеРеквизитыИСведения.Заголовок) КАК СТРОКА(150))
| КОНЕЦ КАК Наименование,
| ДополнительныеРеквизитыИСведения.ТипЗначения КАК ТипЗначения,
| ДополнительныеРеквизитыИСведения.ФорматСвойства КАК ФорматСвойства,
| ДополнительныеРеквизитыИСведения.МногострочноеПолеВвода КАК МногострочноеПолеВвода,
| ВсеСвойства.Удалено КАК Удалено,
| ДополнительныеРеквизитыИСведения.Доступен КАК Доступен,
| ДополнительныеРеквизитыИСведения.Виден КАК Виден,
| ВЫБОР
| КОГДА &ЭтоОсновнойЯзык
| ТОГДА ДополнительныеРеквизитыИСведения.Подсказка
| ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Подсказка, ДополнительныеРеквизитыИСведения.Подсказка) КАК СТРОКА(150))
| КОНЕЦ КАК Подсказка,
| ДополнительныеРеквизитыИСведения.ВыводитьВВидеГиперссылки КАК ВыводитьВВидеГиперссылки,
| ДополнительныеРеквизитыИСведения.ЗависимостиДополнительныхРеквизитов.(
| ЗависимоеСвойство КАК ЗависимоеСвойство,
| Реквизит КАК Реквизит,
| Условие КАК Условие,
| Значение КАК Значение,
| НаборСвойств КАК НаборСвойств
| ) КАК ЗависимостиДополнительныхРеквизитов
|ИЗ
| ВсеСвойства КАК ВсеСвойства
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
| ПО ВсеСвойства.Свойство = ДополнительныеРеквизитыИСведения.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Представления КАК СвойстваПредставления
| ПО (СвойстваПредставления.Ссылка = ДополнительныеРеквизитыИСведения.Ссылка)
| И (СвойстваПредставления.КодЯзыка = &КодЯзыка)
|
|УПОРЯДОЧИТЬ ПО
| Удалено,
| ВсеСвойства.ПорядокНабора,
| ВсеСвойства.ПорядокСвойства";
#Вставка
Если НаборыСвойств.Найти(Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_Номенклатура_Общие) <> Неопределено И _Сервер.ПоказыватьСвойстваНоменклатурыПоСвойствамГрупп() Тогда
//Выбираем все свойства из всех наборов
Запрос.Текст = СтрЗаменить(
Запрос.Текст,
"ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов",
"ПРАВОЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов");
Запрос.Текст = СтрЗаменить(
Запрос.Текст,
"НаборыСвойств.Набор КАК Набор,",
"ЕСТЬNULL(НаборыСвойств.Набор, ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка)) КАК Набор,");
УстановитьПривилегированныйРежим(Истина);
ТекНоменклатура = ПараметрыСеанса.дор_ТекущаяНоменклатураДляЗаполненияСвойств;
//Может передаваться или группа или номенклатура
Если ТекНоменклатура.ЭтоГруппа Тогда
ТекГруппа = ТекНоменклатура;
Иначе
ТекГруппа = ТекНоменклатура.Родитель;
Конецесли;
//Выбираем те свойства, которые прописаны для группы в регистре дор_СвойстваПоГруппамНоменклатуры
//Или общие свойства номенклатуры
Запрос.УстановитьПараметр("ТекГруппа", ТекГруппа);
Запрос.Текст = СтрЗаменить(
Запрос.Текст,
"НЕ СвойстваНаборов.ПометкаУдаления",
"НЕ СвойстваНаборов.ПометкаУдаления И (
| ЕСТЬnull(НаборыСвойств.Набор, Неопределено) = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Справочник_Номенклатура_Общие)
| ИЛИ СвойстваНаборов.Свойство В ("
+
"ВЫБРАТЬ
| Т.Свойство КАК Свойство
|ИЗ
| РегистрСведений.дор_СвойстваПоГруппамНоменклатуры КАК Т
|ГДЕ
| Т.Номенклатура = &ТекГруппа"
+
"))");
//| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов
//| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства
КонецЕсли;
#КонецВставки
Если ЭтоДополнительноеСведение Тогда
Запрос.Текст = СтрЗаменить(
Запрос.Текст,
"Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты",
"Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения");
КонецЕсли;
ОписаниеСвойств = Запрос.Выполнить().Выгрузить();
ОписаниеСвойств.Индексы.Добавить("Свойство");
ОписаниеСвойств.Колонки.Добавить("Значение");
// Удаление дублей свойств в нижестоящих наборах свойств.
Если Наборы.Количество() > 1 Тогда
Индекс = ОписаниеСвойств.Количество()-1;
Пока Индекс >= 0 Цикл
Строка = ОписаниеСвойств[Индекс];
НайденнаяСтрока = ОписаниеСвойств.Найти(Строка.Свойство, "Свойство");
Если НайденнаяСтрока <> Неопределено
И НайденнаяСтрока <> Строка Тогда
ОписаниеСвойств.Удалить(Индекс);
КонецЕсли;
Индекс = Индекс-1;
КонецЦикла;
КонецЕсли;
// Заполнение значений свойств.
Для Каждого Строка Из ДополнительныеСвойстваОбъекта Цикл
ОписаниеСвойства = ОписаниеСвойств.Найти(Строка.Свойство, "Свойство");
Если ОписаниеСвойства <> Неопределено Тогда
// Поддержка строк неограниченной длины.
Если НЕ ЭтоДополнительноеСведение Тогда
ИспользоватьСтрокуВВидеСсылки = ИспользоватьСтрокуВВидеСсылки(
ОписаниеСвойства.ТипЗначения,
ОписаниеСвойства.ВыводитьВВидеГиперссылки,
ОписаниеСвойства.МногострочноеПолеВвода);
ИспользоватьНеограниченнуюСтроку = ИспользоватьНеограниченнуюСтроку(
ОписаниеСвойства.ТипЗначения,
ОписаниеСвойства.МногострочноеПолеВвода);
НеобходимоПеренестиЗначениеИзСсылки = НеобходимоПеренестиЗначениеИзСсылки(
Строка.ТекстоваяСтрока,
Строка.Значение);
Если (ИспользоватьНеограниченнуюСтроку
Или ИспользоватьСтрокуВВидеСсылки
Или НеобходимоПеренестиЗначениеИзСсылки)
И НЕ ПустаяСтрока(Строка.ТекстоваяСтрока) Тогда
Если Не ИспользоватьСтрокуВВидеСсылки И НеобходимоПеренестиЗначениеИзСсылки Тогда
ЗначениеБезСсылки = ЗначениеБезСсылки(Строка.ТекстоваяСтрока, Строка.Значение);
ОписаниеСвойства.Значение = ЗначениеБезСсылки;
Иначе
ОписаниеСвойства.Значение = Строка.ТекстоваяСтрока;
КонецЕсли;
Иначе
ОписаниеСвойства.Значение = Строка.Значение;
КонецЕсли;
Иначе
ОписаниеСвойства.Значение = Строка.Значение;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат ОписаниеСвойств;
КонецФункции
|
|