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

29.03.16

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

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

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

SALE! %

Мастера заполнения Поиск данных База данных Инструментарий разработчика Корректировка данных Универсальные функции Механизмы платформы 1С Подбор и обработка объектов 1С 8.3 1С 8.5 Платные (руб)

Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигационной ссылки/представления документа для автоподбора; для разработчиков доступны поиск по GUID и полному имени предопределённого. Работает в управляемых формах и подключается в большинстве конфигураций 1С 8.3/8.5.

5000 4000 руб.

25.02.2026    1919    9    1    

11

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

Разберем 15 мифов о работе платформы «1С:Предприятие 8» – как распространенных, так и малоизвестных. Начнем с классики: «Код, написанный в одну строку, работает быстрее, чем многострочный». Так ли это на самом деле?

16.07.2025    30158    TitanLuchs    106    

149

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

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

03.02.2025    16458    bayselonarrend    127    

68

Механизмы платформы 1С Программист 1С:Предприятие 8 Бесплатно (free)

В этой статье подробно рассматривается работа с JSON в XDTO в 1С:Предприятие. Вы узнаете, как сериализовать и десериализовать объекты XDTO в JSON, интегрировать 1С с веб-сервисами и API, а также корректно обрабатывать данные при обмене. Разбираются особенности работы с коллекциями, использование функций восстановления и частые ошибки при работе с JSON и XDTO.

30.01.2025    19653    user2122906    9    

66

Механизмы платформы 1С Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 Бесплатно (free)

Этот материал познакомит вас с механизмом XDTO (XML Data Transfer Objects) в 1С и научит эффективно использовать его возможности. Мы разберёмся, как работать с XML-схемами, создавать модели данных, манипулировать объектами XDTO, а также сериализовать и десериализовать их в XML. Вы узнаете, как использовать XDTO для интеграции с внешними системами, избегать типичных ошибок и оптимизировать код. К концу вы будете уверенно применять XDTO для решения сложных задач обмена данными и автоматизации процессов.

17.01.2025    33906    user2122906    12    

61

Механизмы платформы 1С WEB-интеграция Программист 1С:Предприятие 8 Бесплатно (free)

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

14.01.2025    30632    dsdred    100    

147

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

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

23.06.2024    27170    bayselonarrend    22    

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


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

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

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

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

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