Интересные странности BindExpression

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Интересные странности BindExpression

Сообщение Игорь Столяров » 28 Апрель 2019, 8:51

Привет всём !

Наткнулся на интересный момент при работе с пространством имён. Фрагмент кода BROWSE ABC:

Код: Выделить всё

ThisWindow.Init PROCEDURE
...
   ReturnValue = PARENT.Init()
...
! BIND variables (Вроде человеческим языком написано наименование Embedd)
  Bind('TV1',Tov:Valuta)  ! РАБОТАЕТ 
  BindExpression('TV2','Tov:Valuta + 1')  ! НЕ РАБОТАЕТ - именно привязка выражения, а не рассчитанного значения
...
  Relate:Tovar.Open
  BindExpression('TV2','Tov:Valuta + 1')  ! А ЗДЕСЬ ПРЕКРАСНО РАБОТАЕТ 
Т.е. складывается такое интересное впечатление, что для BindExpression() привязка наименований
полей таблицы выполняется только при её открытии … Так и должно быть ? :(
«V» значит Вендетта !

Yufil
Ветеран движения
Сообщения: 1123
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

Интересные странности BindExpression

Сообщение Yufil » 29 Апрель 2019, 9:24

А точка вместо двоеточия не пойдёт?

kreator
✯ Ветеран ✯
Сообщения: 3334
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Интересные странности BindExpression

Сообщение kreator » 29 Апрель 2019, 14:59

Могу только подтвердить ситуацию. При этом evaluate честно сообщает об ошибке 1011. Налицо ущербность BindExpression. Грубовато, скорее надо бы в документации отобразить нюансы. Работает не так как Bind.
We are hard at work… for you. :)

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Интересные странности BindExpression

Сообщение Игорь Столяров » 29 Апрель 2019, 16:29

kreator писал(а):
29 Апрель 2019, 14:59
Могу только подтвердить ситуацию.
Тут похоже, что снова чудны дела рук детей твоих, господи … ;)

Уже понятно, что пространство имён из полей таблиц создаётся в методе их открытия, никто и не против.
Но тогда вставка Embed для BIND должен идти после открытия таблиц и надо написать в справке о том,
что именно "поля ОТКРЫВАЕМЫХ таблиц доступны для BIND" - и не было бы вопросов.

Нужно запомнить, где лежат ещё одни грабли и просто их обходить. :)
«V» значит Вендетта !

kreator
✯ Ветеран ✯
Сообщения: 3334
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Интересные странности BindExpression

Сообщение kreator » 29 Апрель 2019, 17:19

Игорь Столяров писал(а):
29 Апрель 2019, 16:29
Уже понятно, что пространство имён из полей таблиц создаётся в методе их открытия, никто и не против.
Для Bind это не так. Я так и понял, что Вас возмутила разная реализация Bind и BindExpression. Или не так понял?
We are hard at work… for you. :)

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Интересные странности BindExpression

Сообщение Игорь Столяров » 29 Апрель 2019, 19:20

kreator писал(а):
29 Апрель 2019, 17:19
Или не так понял?
Абсолютно правильно поняли. Но потом подумал, и понял, что видимо BindExpression - это просто надстройка над Bind.
А сам Bind ведь не использует символьные имена, он их объявляет. Поэтому говорить о расхождении разного - не смысла.

Есть в какой-то таблице Tovar поле Tov:Number. Если посмотреть описание - то получается, что имя "Tov:Number" объявлено
всегда и везде … Но это не так. Получается, что имя "Tov:Number" действует только после открытия файла Tovar в потоке.
Но почему тогда embed для BIND находится до открытия файлов ? Вот непонятность где подкралась …

Хотя, с другой стороны, это я решил, что объявлять BindExpression логично там же где и штатные BIND.
А архитектор шаблонов ABC, судя по всему, предполагал иное. ;)
«V» значит Вендетта !

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

Интересные странности BindExpression

Сообщение finsoftrz » 29 Апрель 2019, 19:53

В ШВС bind делается автоматически в процедуре открытия таблицы, после открытия таблицы. Точнее, это определяется настройкой в шаблонах.
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Интересные странности BindExpression

Сообщение Игорь Столяров » 29 Апрель 2019, 20:03

finsoftrz писал(а):
29 Апрель 2019, 19:53
В ШВС bind делается автоматически
Так вроде тот бобик давно уже сдох … Кто юзает ШВС в 2019 г. и зачем ?
«V» значит Вендетта !

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

Интересные странности BindExpression

Сообщение finsoftrz » 29 Апрель 2019, 20:37

Я просто написал, как это работает.
На ШВС в России работают, наверно, не меньше, чем на АБС. То есть по несколько человек. Хотите поговорить об этом?
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Интересные странности BindExpression

Сообщение Игорь Столяров » 30 Апрель 2019, 6:14

finsoftrz писал(а):
29 Апрель 2019, 20:37
Хотите поговорить об этом?
Неа. Абсолютно чужая для меня тема. Много-много лет назад я ШВС внимательно просмотрел и удалил.
Для тех кто работал под CPD2.1/3 вопрос заброшенных разработчиком самопальных шаблонов был не особо приятным.

Но безусловно, механизмы реализации того или иного функционала в Clarion знать надо и в этом очень помогает
изучение как шаблонов, так и исходников ABC. Просто не всегда понятно почему что-то так или иначе сделано и работает ...
«V» значит Вендетта !

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

Интересные странности BindExpression

Сообщение finsoftrz » 30 Апрель 2019, 8:57

Игорь, это не совсем верная информация. ШВС - русифицированные группой интузиастов классические шаблоны, которые в дальнейшем, прежде всего усилиями Вадима Синявского, получили значительное функциональное развитие. В конце 90-х были самыми продвинутыми шаблонами для клариона.
Когда я в 2003 году смотрел кларион на предмет целесообразности его использования, то в ABC я не понял ничего. Конечно, сейчас, имея опыт разработки, я уже понимаю, как там устроено, знаю про виртуальные методы, условную кодогенерацию и т.п. Но сходу впечатления были отвратные. И в плане общего понимания, и в плане предлагавшегося функционала. Потом я открыл ШВС, попробовал что-то сделать, и получилось. Я смотрел сгенеренный шаблонами код и быстро схватывал, что и как работает. Дальше попробовал писать шаблоны. Поскольку функциональная планка была высокая, даже ШВС не дотягивали до нужного уровня и требовалось их значительное расширение. Написал один шаблон, второй. Оказалось, что можно в словаре задавать различные пользовательские опции, а затем полностью автоматически создавать большой слой кода, как для имеющихся таблиц, так и для тех, которые появятся в будущем. Оказалось, что можно обычным способом создавать оконные процедуры и навешивать в них шаблоны, которые просвечивают словарь. Так появилась большая стандартная app, на которой базируется фреймворк и которая может подключаться в разные проекты. А число дополнительных шаблонов постепенно перевалило за полторы сотни. По прошествию многих лет, когда шаблоны практически не модифицируются и многие тонкости забываются, всегда можно открыть их сырцы, посмотреть сгенеренный результат и быстро все вспомнить. Позже появилась технология визардов. Оказалось, что можно по определенным правилам разработать какую-то оконную процедуру, сохранить ее в txa, а затем несколькими небольшими заменами в txa создать специализированный визард для диалогов с мощным функционалом. Вначале весь код делался в привычной процедурной манере, затем стало все больше классов. Одно другого не исключает.
Конечно, ШВС не идеальны. В них много не хватало, были также унаследованные от базовых clarion шаблонов не очень удачные решения. Например, генерация кода добавления записи в form шаблоне, вместо того, чтобы вынести в отдельную процедуру, как сделано для удаления или модификации записей. Все это пришлось дорабатывать.
По состоянию на сегодня, шаблоны ШВС со всеми расширениями без проблем работают в последних версиях клариона. У меня модифицируются они крайне редко, так как все, что нужно, давно написано и отлажено. И они остаются очень прозрачны для понимания как текста самих шаблонов, так и создаваемого ими кода. В этом их несомненное преимущество. Объем кода, создаваемого ШВС, заметно больше объема кода, создаваемого ABC. Программы работают несколько быстрее.
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Интересные странности BindExpression

Сообщение Игорь Столяров » 30 Апрель 2019, 9:56

finsoftrz писал(а):
30 Апрель 2019, 8:57
Объем кода, создаваемого ШВС, заметно больше объема кода, создаваемого ABC. Программы работают несколько быстрее.
Спасибо - я прочитал. Вот этот хвостик сообщения - можно сказать про любое объектно-ориентированное программирование.
Это хорошо, что у Вас есть желание, взяв некие шаблоны за основу, далее их самостоятельно поддерживать и развивать.

А я вот наоборот, поставил себе великую задачу - до нового десятилетия выкосить из проектов все заброшенные разработчиками
библиотеки и шаблоны. И далее уже не париться с совместимостью кода и поддержкой всего этого рудимента. Большая работа ! :)
«V» значит Вендетта !

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

Интересные странности BindExpression

Сообщение finsoftrz » 30 Апрель 2019, 10:44

Шаблоны поддерживать и развивать практически не требуется, они достигли необходимого уровня стабильности. К слову, я, можно сказать, не использую библиотеки и шаблоны от сторонних разработчиков. Исключение составляет FRB. Хотя давно есть более функциональный аналог, но очень много бланков. И, таки да, большинство проблем связано с интеграцией библиотек и шаблонов от сторонних разработчиков. Но тут особого выбора нет, или пиши сам, или пользуйся тем, что дают/продают. У обоих подходов есть свои сторонники.
Рязань решает.

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

Интересные странности BindExpression

Сообщение finsoftrz » 30 Апрель 2019, 10:49

Уточню, я имел ввиду закрытые библиотеки от сторонних разработчиков. Те, которые с сырцами, используются, но тоже, по возможности, в минимальном объеме.
Рязань решает.

kreator
✯ Ветеран ✯
Сообщения: 3334
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Интересные странности BindExpression

Сообщение kreator » 30 Апрель 2019, 11:07

Вернёмся к нашим баранам.
Игорь Столяров писал(а):
29 Апрель 2019, 19:20
Хотя, с другой стороны, это я решил, что объявлять BindExpression логично там же где и штатные BIND.
А архитектор шаблонов ABC, судя по всему, предполагал иное. ;)
Для меня логично, что объявлять BindExpression там же где и BIND. Но здесь дело не в объявлениях и шаблонах. Мой ручной не работает так как я ожидаю (При не открытом файле BindExpression). Смутно помню, что BindExpression появился позднее Bind, возможно криво реализовали, или ещё какая-то муть, может, действительно, надстройка. В любом случае - плохо, что в хелпе этих нюансов нет.
Игорь Столяров писал(а):
29 Апрель 2019, 20:03
Так вроде тот бобик давно уже сдох … Кто юзает ШВС в 2019 г. и зачем ?
Я как появилась возможность слезть с Легаси сразу слез. Вадим Синявский не говорил почему кинул шаблоны? Почему не стал ABC-шаблоны расширять?
We are hard at work… for you. :)

Ответить