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

29.03.16

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

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

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

См. также

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

Про ООП в 1С и о том, как сделать свой код более кратким и выразительным при помощи использования текучего интерфейса (fluent interface).

03.02.2025    6017    bayselonarrend    126    

59

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

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    7804    dsdred    57    

99

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

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    11517    bayselonarrend    21    

162

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

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    7851    dsdred    18    

82

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

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

24.01.2024    27066    YA_418728146    33    

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


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

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

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

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

Показать
Glebis; weissfeuer; +2 Ответить
6. Fragster 1154 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
и в конце добавить
	ПолеПредставления = Новый ПолеКомпоновкиДанных("РедактируемыеПараметры.Представление");
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", ПолеПредставления);
Оставьте свое сообщение