Глюки видимости колонок, продолжение

Автор Злоп, 10 марта 2024, 02:51

« назад - далее »

Злоп

Как определили ранее - можно сделать колонку ТЗ "НомерСтроки" видимой. И исходим из того, что ее положение =1 (ибо если ТЗ.УстановитьПараметрыКолонки() переставить ее куда-то правее - трудно всякие расчеты делать). ОК.

Но тут вот вылезли глюки видимости обычных колонок ТЗ если делать НомерСтроки видимость(1) - в зависимости как они определены относительно других обычных колонок ТЗ и какую видимость имеют эти обычные колонки ТЗ.

Выкладываю тест - варианты 3-4-5-6 обратить внимание, по коду место отбито маркером //АЛЬФ

Пока похоже на то, чтобы избежать глюков надо видимость колонки =0 (или 1 для служебной НомерСтроки) - задавать сразу после определения колонки. Но это неточно... мысли девелопера...

АЛьФ

Тестовый пример не смотрел ещё, но знаю, что там вообще при включении видимости номера строки всякие разнообразные глюки лезут. Не хотелось бы в эту тему глубоко погружаться пока. Обход глюков простейший - сделать свою колонку, куда дублировать номер строки.

Злоп

Цитата: АЛьФ от 10 марта 2024, 08:58сделать свою колонку, куда дублировать номер строки.
ну, это ж несрочно...
ага.. и каждый раз перезаполнять при сортировке/удалении/итд..?
Как обойтись без глюков в большинстве вариантов вроде понятно как

АЛьФ

Посмотрел тестовый пример, но так и не понял куда смотреть. У меня вроде все варианты нормально отрисовываются. Единственное я переделал на план раскраски - переименовал колонку "Курсор" в "FormEx_ПланРаскраски".

Злоп

Открыть обработку. Поставить любой вариант. Сохранить настройку (Основная, использовать при открытии=ДА, сохранять автоматически=ДА). Выбирать вариант, жмакать Переоткрыть - смотреть на ТЗ - д.б. колонка "Код". Работает на всех вариантах кроме вар4 - почему? По коду вариант 4 интересно смотреть с вариантами 3,5,6, особенно с вариантом 3...
.
варианты порядка колонок/видимостей в процедуре ПриОткрытии
.
формекс - последний тестовый на момент сообщений
видео https://wdfiles.ru/28u5B

Злоп

формекс - последний тестовый на момент этого сообщения
тестовая обработка (переделано на ПланРаскраски): https://wdho.ru/jO7X
видео https://wdfiles.ru/28u5B

АЛьФ

Боюсь мне это не подправить все же. Тут требуются фундаментальные переделки таблицы значений, насколько я понимаю.
Возникла в связи с этим мысль - сделать возможным задавать в колонке ТЗ формулу. Типа как формула в многострочной части. Опять же, не знаю получится ли такое сделать. Но должен быть интересным этот функционал. И задачу вывода номера строки, как частный случай, решало бы.

Злоп


АЛьФ

Цитата: Злоп от 13 марта 2024, 09:39Будем ждать...

Не все так просто. Надо обсудить некоторые моменты.
Т.к. ТЗ не предназначена для такого функционала и никаких внутренних флагов для расчетных колонок я не нашел, придется как-то обозначать, что в данной колонке хранится именно формула. Пока мысль использовать некие макросы, как макрос раскраски. Должно выглядеть как-то так:

тз.НоваяСтрока();
тз.Товар = ВыбТовар;
тз.фНомерСтроки = "{формула}НомерСтроки";
тз.FormEx_ПланРаскраски = "{формула}ПолучитьРаскраску(Товар, МестоХранения)";

Злоп

только букав поменьше..
{ф} типа... или {ф:}

АЛьФ

При начальных набросках тут же натолкнулся, что нет смысла прописывать формулу в каждой строке. В много строчной части она же задается одна на всю колонку. Буду двигаться в этой парадигме.
Код установки формулы в колонку меняется. Решил, что для формулы можно использовать поле формата колонки:
тз.НоваяКолонка("Товар");
тз.НоваяКолонка("фНомерСтроки",,,,,,"#НомерСтроки");
тз.НоваяКолонка("фПредставление",,,,,,"#глПредставлениеСправочника(Товар)");
тз.НоваяКолонка("фЦена",,,,,,"#Товар.Цена#Ч10.2"); // для сохранения возможности форматирования

АЛьФ

Продолжаю работу по формулам в ТЗ и вскрылся интересный эффект. Получилось, что формулы работают не только в визуальном представлении ТЗ на форме, но и в программной ТЗ. В том числе и в отображении методом ВыбратьСтроку(), и при любом чтении из таблицы.

Для примера:
тз = СоздатьОбъект("ТаблицаЗначений");
тз.НоваяКолонка("Товар");
тз.НоваяКолонка("фНомерСтроки",,,,,,"#НомерСтроки");
тз.НоваяКолонка("фПредставление",,,,,,"#глПредставлениеСправочника(Товар)");

спр = СоздатьОбъект("Справочник.Товары");
спр.ВыбратьЭлементы();
Пока спр.ПолучитьЭлемент() = 1 Цикл
	тз.НоваяСтрока();
	тз.Товар = спр.ТекущийЭлемент();
	Сообщить("Представление в строке " + тз.НомерСтроки + " = " + тз.фПредставление); // сообщит результат формулы
КонецЦикла;

Однако, есть и ограничения и неоднозначности, которые относятся к контексту окружения. Таблица может передаваться между контекстами, например, в открываемую форму отчета, и вычисление формулы, если разрешить использовать переменные контекста в ней, будет непредсказуемым.
Выход вижу только один - ограничить вычисление глобальным контекстом. Максимум - можно добавить служебную переменную для передачи в формулу текущего контекста.
Как-то так:

тз.НоваяКолонка("фПредставление",,,,,,"#глПредставлениеСправочника(@Контекст, Товар)");

Но тут все на совести программиста будет тогда. И не факт, что контекст будет всегда верным определяться.

Есть какие-нибудь мысли по этому поводу?

alyuev

А как парсишь саму формулу - от первой до последней кавычки? Там же еще всякие кавычки надо обрабатывать внутри, в параметрах самой формулы. Стрёмное это дело....

АЛьФ

Цитата: alyuev от 15 марта 2024, 13:26А как парсишь саму формулу - от первой до последней кавычки? Там же еще всякие кавычки надо обрабатывать внутри, в параметрах самой формулы. Стрёмное это дело....
Я тупо вырезаю все, что заключено между #. И далее эту строку передаю в 1С для расчета формулы. Что вне этих символов - считается форматирующей строкой.

Формула вида С#"#" + Товар.Наименование#20 даст не ожидаемые формулу "#" + Товар.Наименование и формат С20, а формулу " и формат С" + Товар.Наименование#20.

Не вижу смысла тут особо заморачиваться и брать на себя работу программиста.
Как и любой функционал FormEx, этот требует вдумчивого и осторожного использования.

Djelf

Согласен. Задокументированный баг это не глюк,а фича. Но это обязательно должно быть указано в als.
P.S. Раз появился собственный форум, то в als иногда можно вставлять ссылки на конкретные темы.