![]() |
#1 |
Участник
|
Определить из какой формы заполняется таблица.
Добрый день,
есть ли возможность определить с какой именно формы заполняется таблица из метода самой таблицы? Пример: SalesLine из формы SalesTable, a также ProjSalesItemReq. Спасибо. |
|
![]() |
#2 |
Участник
|
Сделать то можно, но если посмотрите в стандарте вы таких мест не найдёте.
Например вот здесь взять информацию X++: info(con2str(xSession::xppCallStack())); Лучше в метод добавить BaseEnum.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
|
За это сообщение автора поблагодарили: dynamax (1). |
![]() |
#3 |
Участник
|
еще PurchTable.dataSource().functionObject() но это очень плохая практика - а зачем это нужно вам?
|
|
|
За это сообщение автора поблагодарили: dynamax (1). |
![]() |
#4 |
Участник
|
|
|
![]() |
#5 |
Участник
|
|
|
![]() |
#6 |
Участник
|
Цитата:
Раз у вас появилась в формулировке объект форма, то логичнее предположить что вам метод нужно реализовывать выше. Выделите часть это кода в отдельный метод и повести его на таблицу. Перекройте на datasourse формы метод validate на нужном поле и до super вызывайте его.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#7 |
Участник
|
|
|
![]() |
#8 |
MCITP
|
![]()
Ну, в общем случае, чисто как вариант, можно завести ещё поле-признак в таблице (можно с SaveContents = No) и заполнять его на нужных формах в датасорсе.
А в методах таблицы уже его проверять. Если, конечно, нет уже готовых смысловых полей, которые можно использовать аналогично.
__________________
Zhirenkov Vitaly |
|
|
За это сообщение автора поблагодарили: dynamax (1). |
![]() |
#9 |
Участник
|
Если заводить такое поле-признак, надо еще, чтобы одна из форм не могла отредактировать запись, которую можно отредактировать в другой из форм. Иначе получится противоречие. Так что признак не может быть с SaveContents = No
|
|
![]() |
#10 |
MCITP
|
![]() Цитата:
В описанной вами постановке - нет не может. ![]() В общем случае таких ограничений может не быть. Или могут быть обратные. Не вижу повода для дискуссии....
__________________
Zhirenkov Vitaly |
|
![]() |
#11 |
Moderator
|
Не нашел такой функции, может это не в моей версии (у меня 4ка)? Но зато есть PurchTable.dataSource().formRun().
__________________
Андрей. |
|
![]() |
#12 |
Участник
|
Цитата:
В постановке смешиваются разные уровни абстракции. Полностью согласен с miklenew: Цитата:
Сообщение от miklenew
![]() validateField это метод объекта таблица.
Раз у вас появилась в формулировке объект форма, то логичнее предположить что вам метод нужно реализовывать выше. Выделите часть это кода в отдельный метод и повести его на таблицу. Перекройте на datasourse формы метод validate на нужном поле и до super вызывайте его. если у вас возникла хотелка при проверке учитывать данные из другого уровня абстракции, то это первый признак, что вы не все данные храните в таблице, что некоторые жизнено важные данные находятся где-нибудь еще. Что чревато нарушением целостности данных. ============= Кроме того, не забывайте о механизме проверки целостности данных. Он запустит validateField для каждой записи. Теперь представьте, что данные, введенные в форме проверяются отдельно без формы, совсем по другой ветке алгоритма. Вам точно нужны эти заморочки? ============= Кроме того, не забывайте о механизме экспорта/импорта данных, AIF, доступ из внешних систем. Все этим механизмы также могут запустить validateField. ============= Кроме того, не забывайте о трехуровневости Аксапты. Форма работает и живет на клиенте. validateField может выполняться на сервере. ============= Вывод: в validateField таблицы используйте только данные из самой таблицы и/или из связанных таблиц. Ни в коем случае не используйте данные, которые находятся вне базы данных (кэш сессии, локальные переменные формы и т.п.) |
|
![]() |
#13 |
Участник
|
|
|
Теги |
интерфейс, программно, таблица, форма |
|
|