Отображение состояния документа на форме документа

1. userOleg 05.03.25 11:27 Сейчас в теме
Хочу сделать на форме отражение состояния документа (Проведен/Не проведен/Удален)

Попытался это изобразить так создал: форму добавил текстовый реквизит ЭлементСостояния и в модуле формы написал код:
&НаСервере
Процедура ОбновитьСостояниеДокумента()
    Если Объект.Проведен Тогда
        ЭлементСостояния.Текст = "Проведен";
        ЭлементСостояния.ЦветФона = Новый Цвет(0, 255, 0); // Зеленый фон
    ИначеЕсли Объект.ПометкаУдаления Тогда
        ЭлементСостояния.Текст = "Удален";
        ЭлементСостояния.ЦветФона = Новый Цвет(255, 0, 0); // Красный фон
    Иначе
        ЭлементСостояния.Текст = "Не проведен";
        ЭлементСостояния.ЦветФона = Новый Цвет(255, 255, 0); // Желтый фон
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ОбновитьСостояниеДокумента();
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииСостояния(ИзмененныеДанные)
    ОбновитьСостояниеДокумента();
КонецПроцедуры
Показать


Но чтото нихрена не работает, Значение не является значением объектного типа (Текст)

может кто делал у себя нечто подобное, помогите разобраться. Версия 8.3.21
По теме из базы знаний
Найденные решения
25. userOleg 06.03.25 12:06 Сейчас в теме
Кое что поправил
/////////// +Добавление на форму Элемента Состояния Документа ("Проведен" / "Не проведен" / "Удален")
&НаКлиенте
Процедура ОбновитьСостояниеДокумента()
	Если Объект.Проведен Тогда
		Элементы.ЭлементСостояния.Заголовок = "Проведен"; 
        Элементы.ЭлементСостояния.ЦветТекста = Новый Цвет(0, 150, 70); // Зеленый 
        Элементы.ЭлементСостояния.ЦветРамки = Новый Цвет(0, 150, 70); // Зеленый 
    ИначеЕсли Объект.ПометкаУдаления Тогда
        Элементы.ЭлементСостояния.Заголовок = "Удалён";
        Элементы.ЭлементСостояния.ЦветТекста = Новый Цвет(255, 0, 0); // Красный 
        Элементы.ЭлементСостояния.ЦветРамки = Новый Цвет(255, 0, 0); // Красный 
    Иначе
        Элементы.ЭлементСостояния.Заголовок = "Не проведен";
        Элементы.ЭлементСостояния.ЦветТекста = Новый Цвет(0, 0, 0); // черный 
        Элементы.ЭлементСостояния.ЦветРамки = Новый Цвет(0, 0, 0); // черный 
    КонецЕсли;
КонецПроцедуры

 &НаСервере
 Процедура СозданиеЭлементаСостояния()
 	Элемент = ЭтаФорма.Элементы.Добавить("ЭлементСостояния", Тип("ДекорацияФормы"), ЭтаФорма.Элементы.Группа1 );  //"Группа1" обычно это группа с Номером и Датой документа
	Элемент.Заголовок = "Состояние документа";  
	Элемент.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 2); 
	Элемент.Ширина = 13;
	Элемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Центр; 
	Элемент.Шрифт =  Новый Шрифт(,,Истина,,,,); //Полужирный
 КонецПроцедуры
 
&НаКлиенте
Процедура ПриОткрытии(Отказ)
	СозданиеЭлементаСостояния();  //Вставлено для понимания свойств элемента, можно нарисовать в ручную
	ОбновитьСостояниеДокумента();
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	ОбновитьСостояниеДокумента();
КонецПроцедуры
Показать



Жду замечаний.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. glek 119 05.03.25 11:56 Сейчас в теме
(1) Итить-колотить. Даже на этом сайте поискать лень.
user_1936660; +1 Ответить
4. user2107191 05.03.25 11:57 Сейчас в теме
(1)
может кто делал у себя нечто подобное
Таких придется долго искать. Задача нетривиальная!
user_1936660; orakool; +2 Ответить
2. user2107191 05.03.25 11:55 Сейчас в теме
Уже и Вселенная подсказывает, что нет такого свойства "Текст", но мы настойчивые!

Джуниорская болезнь - путать реквизит формы с элементом формы.
5. userOleg 05.03.25 13:05 Сейчас в теме
(2) я понял. что нет, а вот ка можно сделать не знаю, похоже и Вы не знаете.
6. user2107191 05.03.25 14:29 Сейчас в теме
(5)
похоже и Вы не знаете.
Откуда уж мне, болезному, знать о таких грандиозных и непостижимых возможностях вывода букв на форму.
13. user_1936660 05.03.25 16:49 Сейчас в теме
(5)
похоже и Вы не знаете.
Ты совершенно прав. Тут никто ничего не знает. Спрашивай в других местах.
7. userOleg 05.03.25 14:57 Сейчас в теме
Я понимаю - писать свои мысли проще, чем сформулировать ответ по существу вопроса.
8. Sashares 33 05.03.25 15:09 Сейчас в теме
(7) Тебе подсказывают, что надо менять свойства у элемента формы, а не у реквизита.
Тебе осталось узнать как обратиться к элементу формы.
9. user2107191 05.03.25 15:21 Сейчас в теме
(8) Или наоборот - надо установить значение реквизита. Который называется "ЭлементСтояния".
И вообще - откуда нам знать, что это юное дарование понимает под термином "добавил реквизит".
orakool; Sashares; +2 Ответить
10. userOleg 05.03.25 15:26 Сейчас в теме
переделал вот так, вроде работает,

Процедура ОбновитьСостояниеДокумента()
    Если Объект.Проведен Тогда
		Элементы.ЭлементСостояния.Заголовок = "Проведен";
        Элементы.ЭлементСостояния.ЦветТекстаЗаголовка = Новый Цвет(50, 205, 50); 
    ИначеЕсли Объект.ПометкаУдаления Тогда
        Элементы.ЭлементСостояния.Заголовок = "Удален";
        Элементы.ЭлементСостояния.ЦветТекстаЗаголовка = Новый Цвет(255, 0, 0); 
    Иначе
        Элементы.ЭлементСостояния.Заголовок = "Не проведен";
        Элементы.ЭлементСостояния.ЦветТекстаЗаголовка = Новый Цвет(0, 0, 0); 
    КонецЕсли;
КонецПроцедуры
Показать


Но мне не нравится, как-то коряво через заголовок.
Может кто подскажет более красивый способ?
11. Sashares 33 05.03.25 15:27 Сейчас в теме
(10) Установи значение реквизита.
МойРеквизит = НужноеЗначение;

И цвет фона - в свойствах элемента.
12. userOleg 05.03.25 15:32 Сейчас в теме
При попытке в него сохранить - ошибка Поле объекта не доступно для записи.
14. user2107191 05.03.25 17:20 Сейчас в теме
(12) Это ты сейчас с кем разговариваешь?
15. miniogn 48 05.03.25 17:52 Сейчас в теме
Подскажи, плис, откуда вызывается
Процедура ПриИзмененииСостояния(ИзмененныеДанные)
16. userOleg 06.03.25 08:43 Сейчас в теме
(15) эту процедуру я заменил на ПослеЗаписи()
17. userOleg 06.03.25 10:20 Сейчас в теме
В итоге получилось вот так:

/////////// +Добавление на форму Элемента Состояния ("Проведен" / "Не проведен" / "Удален")
&НаСервере
Процедура ОбновитьСостояниеДокумента()
	Если Объект.Проведен Тогда
		Элементы.ЭлементСостояния.Заголовок = "Проведен"; 
        Элементы.ЭлементСостояния.ЦветТекста = Новый Цвет(0, 150, 70); // Зеленый 
        Элементы.ЭлементСостояния.ЦветРамки = Новый Цвет(0, 150, 70); // Зеленый 
    ИначеЕсли Объект.ПометкаУдаления Тогда
        Элементы.ЭлементСостояния.Заголовок = "Удалён";
        Элементы.ЭлементСостояния.ЦветТекста = Новый Цвет(255, 0, 0); // Красный 
        Элементы.ЭлементСостояния.ЦветРамки = Новый Цвет(255, 0, 0); // Красный 
    Иначе
        Элементы.ЭлементСостояния.Заголовок = "Не проведен";
        Элементы.ЭлементСостояния.ЦветТекста = Новый Цвет(0, 0, 0); // черный 
        Элементы.ЭлементСостояния.ЦветРамки = Новый Цвет(0, 0, 0); // черный 
    КонецЕсли;
КонецПроцедуры

 &НаСервере
 Процедура СозданиеЭлементаСостояния()
 	Элемент = ЭтаФорма.Элементы.Добавить("ЭлементСостояния", Тип("ДекорацияФормы"), ЭтаФорма.Элементы.Группа1 );  //"Группа1" обычно это группа с Номером и Датой документа
	Элемент.Заголовок = "Состояние документа";  
	Элемент.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 2); 
	Элемент.Ширина = 13;
	Элемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Центр; 
	Элемент.Шрифт =  Новый Шрифт(,,Истина,,,,); //Полужирный
 КонецПроцедуры
 
&НаКлиенте
Процедура ПриОткрытии(Отказ)
	СозданиеЭлементаСостояния();
	ОбновитьСостояниеДокумента();
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	ОбновитьСостояниеДокумента();
КонецПроцедуры
Показать
18. user2107191 06.03.25 10:26 Сейчас в теме
(17) Снимай галочку со своего правильного ответа.
Нахрена ты на сервер-то лезешь при изменении, чудик?
И почему формируешь элемент именно ПриОткрытии() Чтобы с клиента на сервер слазить?

И раз уж ты залез в модуль формы основной конфигурации - то нахрена тебе вообще программно создавать элемент формы? Нарисуй его сразу на форме, и не парь моск.
19. userOleg 06.03.25 11:24 Сейчас в теме
(18) Предложи свой вариант. и может быть он станет лучшим решением.
20. user2107191 06.03.25 11:27 Сейчас в теме
(19) Мне оно зачем?
Ты преподу на экзаменах так же говоришь?
21. userOleg 06.03.25 11:30 Сейчас в теме
(20) У меня нет препода. Учусь у знающих людей, но таких мало, в основном попадаются критики. :) И да, я понимаю что знаю мало и мой код получается кривой.
22. user2107191 06.03.25 11:41 Сейчас в теме
(21) Так тебе советуют где его надо исправить. А ты в ответ - что? Хамишь, типа "предложи свой вариант раз такой умный". Вместо того, чтобы разобраться - а на что же такое тебе намекают этими подсказками?

Ну не хочешь советов и подсказок - ну и хрен с тобой.

Спрашивай у всех сразу правильные варианты, и тогда никогда не поймешь почему они правильные, а твои нет. Это лучший путь обучения, ящщетаю.
23. userOleg 06.03.25 11:53 Сейчас в теме
(18)
почему формируешь элемент именно ПриОткрытии() Чтобы с клиента на сервер слазить?

А как еще? где нужно определять состояние документа? Ты подскажи.
26. user2107191 06.03.25 12:11 Сейчас в теме
(23) Вопрос был не про состояние, а про создание нового элемента.
24. userOleg 06.03.25 12:00 Сейчас в теме
(18)
ахрена тебе вообще программно создавать элемент формы?

Согласен можно и нарисовать сразу.
25. userOleg 06.03.25 12:06 Сейчас в теме
Кое что поправил
/////////// +Добавление на форму Элемента Состояния Документа ("Проведен" / "Не проведен" / "Удален")
&НаКлиенте
Процедура ОбновитьСостояниеДокумента()
	Если Объект.Проведен Тогда
		Элементы.ЭлементСостояния.Заголовок = "Проведен"; 
        Элементы.ЭлементСостояния.ЦветТекста = Новый Цвет(0, 150, 70); // Зеленый 
        Элементы.ЭлементСостояния.ЦветРамки = Новый Цвет(0, 150, 70); // Зеленый 
    ИначеЕсли Объект.ПометкаУдаления Тогда
        Элементы.ЭлементСостояния.Заголовок = "Удалён";
        Элементы.ЭлементСостояния.ЦветТекста = Новый Цвет(255, 0, 0); // Красный 
        Элементы.ЭлементСостояния.ЦветРамки = Новый Цвет(255, 0, 0); // Красный 
    Иначе
        Элементы.ЭлементСостояния.Заголовок = "Не проведен";
        Элементы.ЭлементСостояния.ЦветТекста = Новый Цвет(0, 0, 0); // черный 
        Элементы.ЭлементСостояния.ЦветРамки = Новый Цвет(0, 0, 0); // черный 
    КонецЕсли;
КонецПроцедуры

 &НаСервере
 Процедура СозданиеЭлементаСостояния()
 	Элемент = ЭтаФорма.Элементы.Добавить("ЭлементСостояния", Тип("ДекорацияФормы"), ЭтаФорма.Элементы.Группа1 );  //"Группа1" обычно это группа с Номером и Датой документа
	Элемент.Заголовок = "Состояние документа";  
	Элемент.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 2); 
	Элемент.Ширина = 13;
	Элемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Центр; 
	Элемент.Шрифт =  Новый Шрифт(,,Истина,,,,); //Полужирный
 КонецПроцедуры
 
&НаКлиенте
Процедура ПриОткрытии(Отказ)
	СозданиеЭлементаСостояния();  //Вставлено для понимания свойств элемента, можно нарисовать в ручную
	ОбновитьСостояниеДокумента();
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	ОбновитьСостояниеДокумента();
КонецПроцедуры
Показать



Жду замечаний.
27. user_1936660 06.03.25 14:46 Сейчас в теме
(23)
Ты подскажи.
(19)
Предложи свой вариант.
(25)
Жду замечаний.

Очень похоже на птицу, которая долбит дерево.
Для отправки сообщения требуется регистрация/авторизация

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот