Как вывести динамическое представление для пустого значения (в таблице)?

29.03.16

Разработка - Механизмы платформы 1С

Есть таблица. Часть полей в ней заполняется автоматически, а часть - должен заполнить пользователь. Нужно подсказать пользователю, что именно в какую ячейку вводить - для этого выведем серым текст подсказки внутри каждой незаполненной ячейки.
На поиски решения этой задачки я потратил половину субботы. Надеюсь, моя небольшая заметка поможет кому то провести выходные более продуктивно)
Чтобы не изобретать велосипед, для подсистемы печати договоров в отраслевой конфигурации я взял за образец подсистему печати из УНФ -  мне понравилась и "визуальная", и программная реализация.
 
Но я никак не мог понять, каким образом разработчикам удалось решить задачку, описанную выше:
При печати договоров, когда выбираешь бланк, автоматически заполняется таблица параметров. И в этой таблице для пустых значений сереньким отображается наименование параметра (представление). А если заполнен параметр - то соответственно отображается введенное значение. Вот как добиться такого поведения?
 
Таблица параметров
 
 
Я как ни пробовал, у меня всегда это поле пустое, если пустое значение в этой строке. Поиск по интернетам ничего не дал, пришлось задавать вопрос разработчикам. Ниже делюсь решением, на мой взгляд, оно довольно необычное, - я раньше не сталкивался с таким применением условного оформления.
 
 
Признак заполненности параметра (если значение не заполнено, то выводится представление параметра) и его представление (которое отображается серым) лежат в таблице значений РедактируемыеПараметры.
 
Настройка условного оформления
 
 
По умолчанию для поля текст в настройках условного оформления выбран тип Строка. Чтобы выбрать реквизит формы, необходимо:
  1. очистить текущий тип данных
  2. выбрать новый тип (поле компоновки данных)
  3. после этого по кнопке выбора станет возможным выбрать реквизит формы.
 
Редактирование типа поля
 
Вуаля! Все работает) 
 
Публикация основана на ответах разработчика 1С, за что ему огромное спасибо!
 

интерфейсы УНФ Печать договоров

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4606    dsdred    53    

73

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    5306    YA_418728146    25    

64

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6433    dsdred    36    

112

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    18500    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12108    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8847    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6288    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    16010    SeiOkami    31    

103
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Fragster 1138 29.03.16 16:34 Сейчас в теме
Есть типовое свойство у поля ввода. Называется "Подсказка ввода".
2. weissfeuer 45 29.03.16 16:54 Сейчас в теме
(1) Fragster, верно, есть такое поле. Но если его задать - подсказка будет одинаковой в каждой ячейке.
3. Fragster 1138 29.03.16 18:19 Сейчас в теме
(2) ну, поскольку все равно в таком случае надо насоздавать реквизитов по количеству различных вариантов текста в условном оформлении, то в случае, который на картинке, ИМХО проще нагенерить элементов управления у них уже задать подсказку ввода (возможно с нужным путем к данным - по номеру строки). В любом случае либо программная генерация реквизитов и условного оформления, либо элементов управления.
4. weissfeuer 45 29.03.16 19:44 Сейчас в теме
(3) Fragster, да вроде бы только два реквизита нужно - признак ЗначениеЗаполнено и строковое Представление в табличной части РедактируемыеРеквизиты. Зачем по количеству вариантов то создавать? В таблице же все хранится...
5. ivanov660 4332 31.03.16 10:53 Сейчас в теме
На самом деле такой подход к разработке не очень удобен:
- проблематично копирование функционала на большой набор форм
- довольно тяжело редактировать большой набор параметров, занимает много времени
- если настраиваете на типовых формах конфигураций, то можете столкнуться с программной очисткой
Оптимально делать программно, к тому же разработчики типовых конфигураций, прошли этап ручной настройки на формах и вызывают программно. Приведу пример оформления данного кода программно:


...
УсловноеОформление.Элементы.Очистить(); // очищаем все что было ))
...
// 1. Создадим новый элемент
Элемент = УсловноеОформление.Элементы.Добавить();

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

// 2. Отбор, критерий по которому будем применять наше оформление
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяЭлемента);
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = ПравоеЗначение;

// 3. Свойстваусловного оформления
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт",новый Шрифт(,,Истина));
...

Показать
Glebis; weissfeuer; +2 Ответить
6. Fragster 1138 31.03.16 12:01 Сейчас в теме
(5) ivanov660, ну, в стандартах разработки от 1с как раз и рекомендуют условное оформление делать программно http://its.1c.ru/db/v8std#content:2149184359:hdoc:_top . Соответственно, можно написать в общем модуле обработчик для заполнения условного оформления на основе колонки с именем реквизита
weissfeuer; +1 Ответить
7. weissfeuer 45 31.03.16 15:04 Сейчас в теме
(6) Fragster, хорошая ссылка, спасибо!)

(5) ivanov660, про большое количество одинаково оформляемых форм - как то не думал в этом контексте) У меня оформление обычно как раз всегда разное.

А как мне программно передать в УстановитьЗначениеПараметра реквизит формы?

ПолеПредставления = Новый ПолеКомпоновкиДанных("РедактируемыеПараметры.Представление");
Элементы.Оформление.УстановитьЗначениеПараметра("Текст", ПолеПредставления);


Так?
8. Denis S 02.04.16 14:33 Сейчас в теме
(7)
Верно, сделать как описано в http://its.1c.ru/db/v8std#content:2149184359:hdoc:_top
и в конце добавить
	ПолеПредставления = Новый ПолеКомпоновкиДанных("РедактируемыеПараметры.Представление");
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", ПолеПредставления);
Оставьте свое сообщение