Имя: Пароль:
1C
 
Как выделить такие ячейки УФ?
0 Гений 1С
 
гуру
22.09.22
09:14
Есть таблица, строки Товар1, Товар2, ...
Колонки: Свойство1, Свойство2, ...
Тип колонки беру из Свойство.ТипЗначения (ПВХ).
Нужно отметить серым ячейки, у которых нельзя вводить значения, т.е. если у этого товара свойства нет.
Есть таблица содержащая допустимые свойства:
Товар, Свойство.
Как нарисовать условное оформление простейшим путем для этой схемы?
Сижу, туплю, ничего простого на ум не идет.
Может создать колонку невидимую СвойствоЕсть1, СвойствоЕсть2, и т.п.
И тогда УО такое: оформить Свойство1 = серое, если СвойствоЕсть1 = истина.
Так штолле?
1 НафНаф
 
22.09.22
09:17
(0) и с таким вопросом ты решил писать убивцу 1С?
2 Ryzeman
 
22.09.22
09:21
(0) Что значит свойства нет? Ты результат какого то запроса по допреквизитам или свойствам вытаскиваешь в ТЗ\ТЧ? Как у тебя NULL в этом запросе обрабатывается?
3 Конструктор1С
 
22.09.22
09:44
(0) тут надо позвать настоящего программиста, хотя бы крепкого джуна
4 Мультук
 
гуру
22.09.22
10:00
(2)
Я так понял:

Свойство есть, но по неким критериям для определенных товаров -- нельзя записывать определенные свойства

(0)

В чём проблема?
Ты уже метод описал.
Программно генерируешь доп-колонки с "Булево", программно генерируешь УО.
Просто и прозрачно
5 Гений 1С
 
гуру
22.09.22
12:00
(2) Здрасьте, приехали. В УТ 11.4 УправлениеСвойствамиСлужебный.ЗначенияСвойств
Кстати Нуф-Нуфу код должен понравиться, там применено спускание контента в стек через параметр сеанса.


&ИзменениеИКонтроль("ЗначенияСвойств")
Функция дор_ЗначенияСвойств(ДополнительныеСвойстваОбъекта, Наборы, ЭтоДополнительноеСведение)

    Если ДополнительныеСвойстваОбъекта.Количество() = 0 Тогда
        // Предварительная быстрая проверка использования дополнительных свойств.
        СвойстваНеНайдены = ДополнительныеРеквизитыИСведенияНеНайдены(Наборы, ЭтоДополнительноеСведение);

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

    Свойства = ДополнительныеСвойстваОбъекта.ВыгрузитьКолонку("Свойство");

    НаборыСвойств = Новый ТаблицаЗначений;

    НаборыСвойств.Колонки.Добавить(
    "Набор", Новый ОписаниеТипов("СправочникСсылка.НаборыДополнительныхРеквизитовИСведений"));

    НаборыСвойств.Колонки.Добавить(
    "ПорядокНабора", Новый ОписаниеТипов("Число"));

    Для каждого ЭлементСписка Из Наборы Цикл
        НоваяСтрока = НаборыСвойств.Добавить();
        НоваяСтрока.Набор         = ЭлементСписка.Значение;
        НоваяСтрока.ПорядокНабора = Наборы.Индекс(ЭлементСписка);
    КонецЦикла;

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Свойства",      Свойства);
    Запрос.УстановитьПараметр("НаборыСвойств", НаборыСвойств);
    Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык);
    Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка);

    Запрос.Текст =
    "ВЫБРАТЬ
    |    НаборыСвойств.Набор КАК Набор,
    |    НаборыСвойств.ПорядокНабора КАК ПорядокНабора
    |ПОМЕСТИТЬ НаборыСвойств
    |ИЗ
    |    &НаборыСвойств КАК НаборыСвойств
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    НаборыСвойств.Набор КАК Набор,
    |    НаборыСвойств.ПорядокНабора КАК ПорядокНабора,
    |    СвойстваНаборов.Свойство КАК Свойство,
    |    СвойстваНаборов.ПометкаУдаления КАК ПометкаУдаления,
    |    СвойстваНаборов.НомерСтроки КАК ПорядокСвойства
    |ПОМЕСТИТЬ СвойстваНаборов
    |ИЗ
    |    НаборыСвойств КАК НаборыСвойств
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов
    |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства
    |            ПО СвойстваНаборов.Свойство = Свойства.Ссылка
    |        ПО (СвойстваНаборов.Ссылка = НаборыСвойств.Набор)
    |ГДЕ
    |    НЕ СвойстваНаборов.ПометкаУдаления
    |    И НЕ Свойства.ПометкаУдаления
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    Свойства.Ссылка КАК Свойство
    |ПОМЕСТИТЬ ЗаполненныеСвойства
    |ИЗ
    |    ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства
    |ГДЕ
    |    Свойства.Ссылка В(&Свойства)
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    СвойстваНаборов.Набор КАК Набор,
    |    СвойстваНаборов.ПорядокНабора КАК ПорядокНабора,
    |    СвойстваНаборов.Свойство КАК Свойство,
    |    СвойстваНаборов.ПорядокСвойства КАК ПорядокСвойства,
    |    СвойстваНаборов.ПометкаУдаления КАК Удалено
    |ПОМЕСТИТЬ ВсеСвойства
    |ИЗ
    |    СвойстваНаборов КАК СвойстваНаборов
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка),
    |    0,
    |    ЗаполненныеСвойства.Свойство,
    |    0,
    |    ИСТИНА
    |ИЗ
    |    ЗаполненныеСвойства КАК ЗаполненныеСвойства
    |        ЛЕВОЕ СОЕДИНЕНИЕ СвойстваНаборов КАК СвойстваНаборов
    |        ПО ЗаполненныеСвойства.Свойство = СвойстваНаборов.Свойство
    |ГДЕ
    |    СвойстваНаборов.Свойство ЕСТЬ NULL
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    ВсеСвойства.Набор КАК Набор,
    |    ВсеСвойства.Свойство КАК Свойство,
    |    ДополнительныеРеквизитыИСведения.ВладелецДополнительныхЗначений КАК ВладелецДополнительныхЗначений,
    |    ДополнительныеРеквизитыИСведения.ЗаполнятьОбязательно КАК ЗаполнятьОбязательно,
    |    ВЫБОР
    |        КОГДА &ЭтоОсновнойЯзык
    |            ТОГДА ДополнительныеРеквизитыИСведения.Заголовок
    |        ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Заголовок, ДополнительныеРеквизитыИСведения.Заголовок) КАК СТРОКА(150))
    |    КОНЕЦ КАК Наименование,
    |    ДополнительныеРеквизитыИСведения.ТипЗначения КАК ТипЗначения,
    |    ДополнительныеРеквизитыИСведения.ФорматСвойства КАК ФорматСвойства,
    |    ДополнительныеРеквизитыИСведения.МногострочноеПолеВвода КАК МногострочноеПолеВвода,
    |    ВсеСвойства.Удалено КАК Удалено,
    |    ДополнительныеРеквизитыИСведения.Доступен КАК Доступен,
    |    ДополнительныеРеквизитыИСведения.Виден КАК Виден,
    |    ВЫБОР
    |        КОГДА &ЭтоОсновнойЯзык
    |            ТОГДА ДополнительныеРеквизитыИСведения.Подсказка
    |        ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Подсказка, ДополнительныеРеквизитыИСведения.Подсказка) КАК СТРОКА(150))
    |    КОНЕЦ КАК Подсказка,
    |    ДополнительныеРеквизитыИСведения.ВыводитьВВидеГиперссылки КАК ВыводитьВВидеГиперссылки,
    |    ДополнительныеРеквизитыИСведения.ЗависимостиДополнительныхРеквизитов.(
    |        ЗависимоеСвойство КАК ЗависимоеСвойство,
    |        Реквизит КАК Реквизит,
    |        Условие КАК Условие,
    |        Значение КАК Значение,
    |        НаборСвойств КАК НаборСвойств
    |    ) КАК ЗависимостиДополнительныхРеквизитов
    |ИЗ
    |    ВсеСвойства КАК ВсеСвойства
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
    |        ПО ВсеСвойства.Свойство = ДополнительныеРеквизитыИСведения.Ссылка
    |        ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Представления КАК СвойстваПредставления
    |        ПО (СвойстваПредставления.Ссылка = ДополнительныеРеквизитыИСведения.Ссылка)
    |            И (СвойстваПредставления.КодЯзыка = &КодЯзыка)
    |
    |УПОРЯДОЧИТЬ ПО
    |    Удалено,
    |    ВсеСвойства.ПорядокНабора,
    |    ВсеСвойства.ПорядокСвойства";
#Вставка
Если НаборыСвойств.Найти(Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_Номенклатура_Общие) <> Неопределено И _Сервер.ПоказыватьСвойстваНоменклатурыПоСвойствамГрупп() Тогда
    
    
    //Выбираем все свойства из всех наборов
    Запрос.Текст = СтрЗаменить(
    Запрос.Текст,
    "ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов",
    "ПРАВОЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов");
    
    Запрос.Текст = СтрЗаменить(
    Запрос.Текст,
    "НаборыСвойств.Набор КАК Набор,",
    "ЕСТЬNULL(НаборыСвойств.Набор, ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка)) КАК Набор,");
    
    УстановитьПривилегированныйРежим(Истина);
    ТекНоменклатура = ПараметрыСеанса.дор_ТекущаяНоменклатураДляЗаполненияСвойств;
    
    //Может передаваться или группа или номенклатура
    Если ТекНоменклатура.ЭтоГруппа Тогда
        ТекГруппа = ТекНоменклатура;
    Иначе
        ТекГруппа = ТекНоменклатура.Родитель;
    Конецесли;
    
    //Выбираем те свойства, которые прописаны для группы в регистре дор_СвойстваПоГруппамНоменклатуры
    //Или общие свойства номенклатуры
    Запрос.УстановитьПараметр("ТекГруппа", ТекГруппа);
    Запрос.Текст = СтрЗаменить(
    Запрос.Текст,
    "НЕ СвойстваНаборов.ПометкаУдаления",
    "НЕ СвойстваНаборов.ПометкаУдаления И (
    |    ЕСТЬnull(НаборыСвойств.Набор, Неопределено) = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Справочник_Номенклатура_Общие)
    |    ИЛИ СвойстваНаборов.Свойство В ("
    +
    "ВЫБРАТЬ
    |    Т.Свойство КАК Свойство
    |ИЗ
    |    РегистрСведений.дор_СвойстваПоГруппамНоменклатуры КАК Т
    |ГДЕ
    |    Т.Номенклатура = &ТекГруппа"
    +
    "))");
    //|        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов
    //|            ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства
КонецЕсли;
#КонецВставки
    
    Если ЭтоДополнительноеСведение Тогда
        Запрос.Текст = СтрЗаменить(
        Запрос.Текст,
        "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты",
        "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения");
    КонецЕсли;

    ОписаниеСвойств = Запрос.Выполнить().Выгрузить();
    ОписаниеСвойств.Индексы.Добавить("Свойство");
    ОписаниеСвойств.Колонки.Добавить("Значение");

    // Удаление дублей свойств в нижестоящих наборах свойств.
    Если Наборы.Количество() > 1 Тогда
        Индекс = ОписаниеСвойств.Количество()-1;

        Пока Индекс >= 0 Цикл
            Строка = ОписаниеСвойств[Индекс];
            НайденнаяСтрока = ОписаниеСвойств.Найти(Строка.Свойство, "Свойство");

            Если НайденнаяСтрока <> Неопределено
                И НайденнаяСтрока <> Строка Тогда

                ОписаниеСвойств.Удалить(Индекс);
            КонецЕсли;

            Индекс = Индекс-1;
        КонецЦикла;
    КонецЕсли;

    // Заполнение значений свойств.
    Для Каждого Строка Из ДополнительныеСвойстваОбъекта Цикл
        ОписаниеСвойства = ОписаниеСвойств.Найти(Строка.Свойство, "Свойство");
        Если ОписаниеСвойства <> Неопределено Тогда
            // Поддержка строк неограниченной длины.
            Если НЕ ЭтоДополнительноеСведение Тогда
                ИспользоватьСтрокуВВидеСсылки = ИспользоватьСтрокуВВидеСсылки(
                ОписаниеСвойства.ТипЗначения,
                ОписаниеСвойства.ВыводитьВВидеГиперссылки,
                ОписаниеСвойства.МногострочноеПолеВвода);
                ИспользоватьНеограниченнуюСтроку = ИспользоватьНеограниченнуюСтроку(
                ОписаниеСвойства.ТипЗначения,
                ОписаниеСвойства.МногострочноеПолеВвода);
                НеобходимоПеренестиЗначениеИзСсылки = НеобходимоПеренестиЗначениеИзСсылки(
                Строка.ТекстоваяСтрока,
                Строка.Значение);
                Если (ИспользоватьНеограниченнуюСтроку
                    Или ИспользоватьСтрокуВВидеСсылки
                    Или НеобходимоПеренестиЗначениеИзСсылки)
                    И НЕ ПустаяСтрока(Строка.ТекстоваяСтрока) Тогда
                    Если Не ИспользоватьСтрокуВВидеСсылки И НеобходимоПеренестиЗначениеИзСсылки Тогда
                        ЗначениеБезСсылки = ЗначениеБезСсылки(Строка.ТекстоваяСтрока, Строка.Значение);
                        ОписаниеСвойства.Значение = ЗначениеБезСсылки;
                    Иначе
                        ОписаниеСвойства.Значение = Строка.ТекстоваяСтрока;
                    КонецЕсли;
                Иначе
                    ОписаниеСвойства.Значение = Строка.Значение;
                КонецЕсли;
            Иначе
                ОписаниеСвойства.Значение = Строка.Значение;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;

    Возврат ОписаниеСвойств;

КонецФункции


6 Гений 1С
 
гуру
22.09.22
12:01
(4) лень, хочется проще.
7 vicof
 
22.09.22
17:11
(6) Попроси и заплати программисту. Проще всего.
8 Сергиус
 
23.09.22
03:47
(0)В Условном оформлении: Если НЕ ЗначениеЗаполнено(Свойство1) Тогда красим колонку..
9 Гений 1С
 
гуру
23.09.22
07:08
(8) да, но нет. Свойство может быть не заполнено, но допустимо.
10 Гений 1С
 
гуру
23.09.22
07:09
(7) я пока тупо сделал запрет ввода в такие ячейки, при изменении ругаюсь.
11 НафНаф
 
23.09.22
08:04
(10) то есть не осилил?
2 + 2 = 3.9999999999999999999999999999999...