связи, lookup ... еще раз

Обсуждение MAV Direct ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
StillZero
Ветеран
Сообщения: 454
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Контактная информация:

связи, lookup ... еще раз

Сообщение StillZero »

Здравствуй, Андрей.

Возвращаясь к напечатанному.

Существует следующая ситуация.

Организация таблиц:
Есть справочник Предприятия.
Есть таблица Счета.
В таблице Счета есть два поля: Код поставщика, Код получателя. Это коды из таблицы Предприятий.
Счета и Предприятия связаны на сервере два раза по двум полям. В кларином словаре связи нет.

Просмотр счетов:
Есть окно SQLBrowse для просмотра счетов.
В окне просмотра показывается наименование поставщика и получателя. Эти имена берутся из таблиц
"Предприятия" и "Алиас для Предприятий", описанных в кларином словаре.
Связываю таблицы "Счета", "Предприятия" и "Алиас для Предприятий" руками в точке вставки
WHERE:

SELF.Select.Relation(ACC:ProviderID,EPS:EnterpriseID,False)
SELF.Select.Relation(ACC:RecipientID,EPS1:EnterpriseID,False)
где EPS1 - префикс алиаса

Редактирование счета:
На форме два entry-поля для локальных переменных: Имя поставщика, Имя получателя
+ две шаблонные кнопки Lookup button
Обе кнопки вызывают одну и ту же процедуру просмотра таблицы "Предприятия".
Все работает красиво.

Последовательность действий:
1. Пустой брауз.
2. Добавляем новый счет
3. Поставщик: Первый
4. Получатель: Второй
5. Сохраняем
6. В листе показывается Поставщик: Второй, Получатель: Первый - должно быть наоборот
7. Нажимаю кнопку Refresh - становится как надо: Поставщик: Первый, Получатель - Второй
8. Жмем изменить счет.
9. Меняем получателя: Третий
10. Сохраняем
11. В листе показывается - Поставщик: Третий Получатель: Второй
12. Жмем Refresh: Поставщик: Первый, получатель: Третий

Т.е. грабли возникают при просмотре счетов. Редактирование все ОК.
Что делаю не так?

Если понадобится, то могу выслать приладу и скрипты таблиц MS SQL: все в зачаточном состоянии.

Спасибо.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Re: связи, lookup ... еще раз

Сообщение Andrew™ »

StillZero писал(а):Здравствуй, Андрей.

Возвращаясь к напечатанному.

Существует следующая ситуация.

Организация таблиц:
Есть справочник Предприятия.
Есть таблица Счета.
В таблице Счета есть два поля: Код поставщика, Код получателя. Это коды из таблицы Предприятий.
Счета и Предприятия связаны на сервере два раза по двум полям. В кларином словаре связи нет.

Просмотр счетов:
Есть окно SQLBrowse для просмотра счетов.
В окне просмотра показывается наименование поставщика и получателя. Эти имена берутся из таблиц
"Предприятия" и "Алиас для Предприятий", описанных в кларином словаре.
Связываю таблицы "Счета", "Предприятия" и "Алиас для Предприятий" руками в точке вставки
WHERE:

SELF.Select.Relation(ACC:ProviderID,EPS:EnterpriseID,False)
SELF.Select.Relation(ACC:RecipientID,EPS1:EnterpriseID,False)
где EPS1 - префикс алиаса

Редактирование счета:
На форме два entry-поля для локальных переменных: Имя поставщика, Имя получателя
+ две шаблонные кнопки Lookup button
Обе кнопки вызывают одну и ту же процедуру просмотра таблицы "Предприятия".
Все работает красиво.

Последовательность действий:
1. Пустой брауз.
2. Добавляем новый счет
3. Поставщик: Первый
4. Получатель: Второй
5. Сохраняем
6. В листе показывается Поставщик: Второй, Получатель: Первый - должно быть наоборот
7. Нажимаю кнопку Refresh - становится как надо: Поставщик: Первый, Получатель - Второй
8. Жмем изменить счет.
9. Меняем получателя: Третий
10. Сохраняем
11. В листе показывается - Поставщик: Третий Получатель: Второй
12. Жмем Refresh: Поставщик: Первый, получатель: Третий

Т.е. грабли возникают при просмотре счетов. Редактирование все ОК.
Что делаю не так?

Если понадобится, то могу выслать приладу и скрипты таблиц MS SQL: все в зачаточном состоянии.

Спасибо.
как работает Form + Browse, после успешного завершения ввода в форме редактирования запись в Browse инициализируется значениями из файловых буферов, а они на момент выхода из формы неправильные, необходимо соответсвующие записи из справочников подкачать перед выходм из формы либо самому через MAVGET, либо имея в словаре на эти справочники связи вставить в File Schematic для Save кнопки, тогда они сами подкачаются по связям из DCT
Аватара пользователя
StillZero
Ветеран
Сообщения: 454
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Контактная информация:

Сообщение StillZero »

после успешного завершения ввода в форме
это где?

обычно использую в Kill WindowManager-а, вот так:

... SELF.Response = RequestCompleted

а сейчас грит, что SELF.Response = 0, очистилось что ли...

есть точка MAV:Save Completed с приоритетом от 9700 там работает, туда надо ? :) а там SELF.Response чей - WindowManager-а или твоего класса?
Аватара пользователя
StillZero
Ветеран
Сообщения: 454
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Контактная информация:

Сообщение StillZero »

в дополнении к вышесказанному:
вообще не понял, где отследить с чем зашли в форму (Request) и с чем вышли (Response)

к примеру, вешаю на стд WindowManager (ThisWindow) на Kill
if SELF.Response = RequestCancelled...
по кнопке "Отмена" (?Cancel) код отрабатывает, по ESC нет, вечер правда, может втупил по тяжкой :)
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

StillZero писал(а):
после успешного завершения ввода в форме
это где?

обычно использую в Kill WindowManager-а, вот так:

... SELF.Response = RequestCompleted

а сейчас грит, что SELF.Response = 0, очистилось что ли...

есть точка MAV:Save Completed с приоритетом от 9700 там работает, туда надо ? :) а там SELF.Response чей - WindowManager-а или твоего класса?
MAV:Save.Kill в нём анализируй SELF.Response
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

StillZero писал(а):в дополнении к вышесказанному:
вообще не понял, где отследить с чем зашли в форму (Request) и с чем вышли (Response)

к примеру, вешаю на стд WindowManager (ThisWindow) на Kill
if SELF.Response = RequestCancelled...
по кнопке "Отмена" (?Cancel) код отрабатывает, по ESC нет, вечер правда, может втупил по тяжкой :)
в том же MAV:Save есть свойство Request

такж есть и OriginalRequest обычная локальная переменная
Ответить