Версия для печати темы (https://pro1c.org.ua/index.php?s=fd8bf218a1c45d987276247fe2b88ae8&showtopic=5316)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Как хранить в справочнике реквизит "НастройкаОформления"

Автор: awp 08.11.11, 8:13

1С 8.2 УТП
Ув. Знатоки. Есть справочник каждому элемента которого необходимо подвязать реквизит с типом "НастройкаОформления". Но этот тип доступен только в форме в конфигураторе его нет. Может кто сталкивался с решением данной проблемы? Может както преобразовывать?

Сразу отвечу для чего - Есть отчет "Упр. баланс" написан под заказчика. Разделы и статьи баланса хранятся в справочнике. Заказчик хочет "разукрасить" этот отчет, причем как и настраивать его он хочет сам. Использовать "ПосторительОтчетов" не могу - куча преобразований и тп.

За ранее благодарен.

Автор: Vofka 08.11.11, 8:59

Добавьте 3 числовых реквизита в справочник: R, G, B. И в зависимости от этих реквизитов создавайте цвета.

Автор: awp 08.11.11, 9:07

Цитата(Vofka @ 08.11.11, 8:59) *
Добавьте 3 числовых реквизита в справочник: R, G, B. И в зависимости от этих реквизитов создавайте цвета.


Такой вариант я бы предложил для любимой бухгалтерии smile.gif
Для левой разработки это не как то ....


Настройка оформления

Автор: Batchir 08.11.11, 9:40

Может так можно?

ЗначениеСтр = ЗначениеВСтрокуВнутр(ЭлементыФормы.НастройкаОформления.Значение);

ЗначениеСтр хранить в реквизите типа Текст
При необходимости получения оформления выполнять
ЗначениеОформления = ЗначениеИзСтрокиВнутр(ЗначениеСтр);

Но это предположение, не проверял

Автор: awp 08.11.11, 11:24

Цитата(Batchir @ 08.11.11, 9:40) *
Может так можно?
ЗначениеСтр = ЗначениеВСтрокуВнутр(ЭлементыФормы.НастройкаОформления.Значение);

ЗначениеСтр хранить в реквизите типа Текст
При необходимости получения оформления выполнять
ЗначениеОформления = ЗначениеИзСтрокиВнутр(ЗначениеСтр);

Но это предположение, не проверял


Цитата
{Справочник.РазделыУпрБаланса.Форма.ФормаЭлемента.Форма(3)}: Ошибка при вызове метода контекста (ЗначениеИзСтрокиВнутр)
ФормаОформление = ЗначениеИзСтрокиВнутр(Оформление);
по причине:
Ошибка преобразования
по причине:
Ошибка формата потока

Автор: Batchir 08.11.11, 14:49

На 1С:Предприятие 8.2 (8.2.14.537) проблем не возникло.

Цитата
Ошибка формата потока
Это вообще страшная ошибка и прежде чем идти дальше - тестирование и исправление, chdbfl.exe

Автор: awp 08.11.11, 20:29

Цитата(Batchir @ 08.11.11, 14:49) *
На 1С:Предприятие 8.2 (8.2.14.537) проблем не возникло.
Это вообще страшная ошибка и прежде чем идти дальше - тестирование и исправление, chdbfl.exe


То есть у Вас получилось? У меня релиз 8.2.14.519. Попробую установить поновее.

Автор: Batchir 09.11.11, 8:36

Цитата(awp @ 08.11.11, 21:29) *
То есть у Вас получилось? У меня релиз 8.2.14.519. Попробую установить поновее.

т.е. да получилось.
Создал обработку. На форму кинул поле ввода, дал ему имя НастройкаОформления и установил тип НастройкаОформления
Выполнил
ЗначениеСтр = ЗначениеВСтрокуВнутр(ЭлементыФормы.НастройкаОформления.Значение);
ЗначениеОформления = ЗначениеИзСтрокиВнутр(ЗначениеСтр);

Ошибок не получил и переменная ЗначениеОформления хранила настройку оформления (смотрел в отладчике)

Но перед эти советую на копии выполнить "Тестирование и исправление", "chdbfl.exe, потому что "Ошибка формата потока" чаще всего связана с поломанным файлом конфигурации и если это так - то СРОЧНО принять меры, иначе можно потерять базу НАВСЕГДА, что даже фирма 1С не сможет помочь

Автор: awp 09.11.11, 9:23

Спасибо всем за помощь.

ФормаОформление = ЗначениеИзСтрокиВнутр(Оформление);


Если "Оформление" пустая строка - то возникает ошибка.
Решил проблему просто

Попытка
ФормаОформление = ЗначениеИзСтрокиВнутр(Оформление);
Исключение
КонецПопытки

Автор: Batchir 09.11.11, 9:58

Правильнее наверно было бы проверять на заполненное значение а не помещать в попытку, раз известна причина возникновения ошибки.

Если ЗначениеЗаполнено(Оформление) Тогда
      ФормаОформление = ЗначениеИзСтрокиВнутр(Оформление);
КонецЕсли;

Автор: kivals 10.11.11, 7:08

ИМХО более правильно через ХранилищеЗначений сделать. Хотя суть остается та же (даже предполагаю что на внутреннем уровне произойдет то же самое преобразование)...

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua