Доработка интерфейсов Галактики
Модераторы: m0p3e, edward_K, Модераторы
Доработка интерфейсов Галактики
Добрый день!
Мне была поставленная задача, в интерфейс Галактики по формированию договоров встроить функцию, которая будет генерировать номер договора по ряду его атрибутов.
Я написал функцию, которая генерирует номер договора и делает update таблицы dogovor. Функцию встроил в печать договора.
Проблемы, с которыми я столкнулся:
1. Сгенерированный номер записывается в БД, но при этом на экране, в интерфейсе по работе с договорами он не обновляется. Как указать интерфейсу Галактики, что надо обновить данные.
2. При вызове функции печати (Ctrl+P) для только что созданного договора, или существующего договора, но в котором изменили, например, дату заключения, моя функция делает update таблице договоров и присваивает договору номер. Далее пользователь переходит к следующему договору. В этот момент интерфейс по работе с договорами делает Update той же самой записи и переписывает сгенерированные номер договора, тем который был до его генерации.
Посоветуйте как быть.
Может быть, можно номер договора записать в соответствующее поле интерфейса по работе с договорами?
Мне была поставленная задача, в интерфейс Галактики по формированию договоров встроить функцию, которая будет генерировать номер договора по ряду его атрибутов.
Я написал функцию, которая генерирует номер договора и делает update таблицы dogovor. Функцию встроил в печать договора.
Проблемы, с которыми я столкнулся:
1. Сгенерированный номер записывается в БД, но при этом на экране, в интерфейсе по работе с договорами он не обновляется. Как указать интерфейсу Галактики, что надо обновить данные.
2. При вызове функции печати (Ctrl+P) для только что созданного договора, или существующего договора, но в котором изменили, например, дату заключения, моя функция делает update таблице договоров и присваивает договору номер. Далее пользователь переходит к следующему договору. В этот момент интерфейс по работе с договорами делает Update той же самой записи и переписывает сгенерированные номер договора, тем который был до его генерации.
Посоветуйте как быть.
Может быть, можно номер договора записать в соответствующее поле интерфейса по работе с договорами?
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Для того чтобы окно перерисовалось фейсу нужно отправить некое событие, которое он выполнить и перерисует себя
команда то notify кажись(отправляет сразу всем открытым !!)
но
1.она точно не компилиться в fcom
2.нужно знать подходящее событие в конкретном фейсе - а я сомневаюсь, что оно есть готовое.
в 8 в принципе его можно и добавить через alter interface, но тогда можно вклиниться и в саму процедуру создания номера.
команда то notify кажись(отправляет сразу всем открытым !!)
но
1.она точно не компилиться в fcom
2.нужно знать подходящее событие в конкретном фейсе - а я сомневаюсь, что оно есть готовое.
в 8 в принципе его можно и добавить через alter interface, но тогда можно вклиниться и в саму процедуру создания номера.
Попытался найти описание функции notify, но нашел только следующие варианты ее использования:
Подскажите, какие параметры у этой функции.
Код: Выделить всё
Notify(cmEvaluateAndModify, 0);
Notify(cmTblRefresh,0);
Notify(cmTableChanged, longint(coPlanOtpusk));
выдержка из доки :
Для прорисовки записей служат три метода:
1. ReDrawPanel - перересовывает без обращения к БД
2. ReScanPanel - перересовывает из БД кроме текущей записи
3. ReReadRecords - перересовывает из БД, в т.ч. и текущию запись
Каждая последующая функция вызывает предыдущую, поэтому не следует вызывать их две подряд.
[/quote]
Для прорисовки записей служат три метода:
1. ReDrawPanel - перересовывает без обращения к БД
2. ReScanPanel - перересовывает из БД кроме текущей записи
3. ReReadRecords - перересовывает из БД, в т.ч. и текущию запись
Каждая последующая функция вызывает предыдущую, поэтому не следует вызывать их две подряд.
[/quote]
Функции хороши, не спорю. Только применить я их могу, если встрою свою функцию в стандартный Галактический интерфейс по работе с договорами, и перекомпилирую его. А это самый крайний вариант развития событий.Для прорисовки записей служат три метода:
1. ReDrawPanel - перересовывает без обращения к БД
2. ReScanPanel - перересовывает из БД кроме текущей записи
3. ReReadRecords - перересовывает из БД, в т.ч. и текущию запись
-
- Местный житель
- Сообщения: 412
- Зарегистрирован: 28 апр 2005, 11:34
- Откуда: Галактика Млечный Путь
function Notify(Command: word; InfoPtr: pointer): pointer;
для вип = Notify(word,longint):longint;
Command = из набора cm для hanleevent
InfoPtr = не знаю, может 0 или надо у Screw спрашивать.
С другой стороны это только способ послать приложению какое-то сообщение. Что будет делать приложение - прописано у него в обработчике событий для соотв сообщения. Интересно есть ли такое предопределенное сообщение что бы браузеры со скринами пересчитывало?
Если я правильно понял в прикладном коде должно быть что то типа
cmTblRefresh:
if IsNew() or IsModified()
UpdateTable;
else
RereadRecord(#RootTable);
Хотя врятли такое есть в договорах Notify делали для зарплаты.
Если во все интерфейсы такие обработчики вставить то и Notify можно будет везде пользоваться .
для вип = Notify(word,longint):longint;
Command = из набора cm для hanleevent
InfoPtr = не знаю, может 0 или надо у Screw спрашивать.
С другой стороны это только способ послать приложению какое-то сообщение. Что будет делать приложение - прописано у него в обработчике событий для соотв сообщения. Интересно есть ли такое предопределенное сообщение что бы браузеры со скринами пересчитывало?
Если я правильно понял в прикладном коде должно быть что то типа
cmTblRefresh:
if IsNew() or IsModified()
UpdateTable;
else
RereadRecord(#RootTable);
Хотя врятли такое есть в договорах Notify делали для зарплаты.
Если во все интерфейсы такие обработчики вставить то и Notify можно будет везде пользоваться .
-
- Слесарь-системщик
- Сообщения: 304
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
- Контактная информация:
InfoPtr - указатель на "что-то" или любая константа, совместимая по типу с longint. Так сказать, дополнительная информация.
Функция предназначена для рассылки широковещательных сообщений всем вставленным в деск интерфейсам. Используйте любую команду на ваше усмотрение. Команда рассматривается как событие главного окна интерфейса. При помощи этой функции можно, например, попытаться заставить все интерфейсы на десктопе перейти в режим вставки новой записи - просто разошлите команду cmInsert
Сообщение (команда) будет передано каждому интерфейсу в порядке вставки их в десктоп (или в обратном - точно уже не помню). Если кто-то из интерфейсов в обработчике команды вызовет функцию Stop, рассылка сообщения будет немедленно прекращена, и Notify вернет идентификатор этого интерфейса (фактически - указатель на объект TInterface).
Хотя код функции и находится в зарплатных сырцах, использоваться она может где и кем угодно. Я, к примеру, с ее помощью рассылал сообщения о модификациях общеиспользуемых таблиц вроде XARPRED или ZAR_USER: таким образом все интерфейсы на десктопе могли "передернуть" содержимое буферов таблиц в своих ЛТ и перерисовать себя при необходимости. Так когда-то обновлялся текст в сквозных фильтрах по подразделениям и работникам.
Кстати, значение "дополнительного параметра" можно получить в обработчике команды при помощи функции GetNotificationInfoPtr: longint;
Функция предназначена для рассылки широковещательных сообщений всем вставленным в деск интерфейсам. Используйте любую команду на ваше усмотрение. Команда рассматривается как событие главного окна интерфейса. При помощи этой функции можно, например, попытаться заставить все интерфейсы на десктопе перейти в режим вставки новой записи - просто разошлите команду cmInsert
Сообщение (команда) будет передано каждому интерфейсу в порядке вставки их в десктоп (или в обратном - точно уже не помню). Если кто-то из интерфейсов в обработчике команды вызовет функцию Stop, рассылка сообщения будет немедленно прекращена, и Notify вернет идентификатор этого интерфейса (фактически - указатель на объект TInterface).
Хотя код функции и находится в зарплатных сырцах, использоваться она может где и кем угодно. Я, к примеру, с ее помощью рассылал сообщения о модификациях общеиспользуемых таблиц вроде XARPRED или ZAR_USER: таким образом все интерфейсы на десктопе могли "передернуть" содержимое буферов таблиц в своих ЛТ и перерисовать себя при необходимости. Так когда-то обновлялся текст в сквозных фильтрах по подразделениям и работникам.
Кстати, значение "дополнительного параметра" можно получить в обработчике команды при помощи функции GetNotificationInfoPtr: longint;
Виталий