Страница 1 из 4
Добавление документа в модуль
Добавлено: 17 июн 2010, 17:11
BlazeBio
Хотел бы узнать можно ли добавлять в Галактике свою документы в модули. Ну, к примеру, есть модуль "Управления договорами". Там есть документы Договор, Соглашение к договору, Пункт календарного плана. Можно ли к этим документам добавить свои документы, также как свои отчёты. Возникла обходимость добавить в модуль новый документ, в котором изменяется статус и доступ из Галактики как и для других стандартных документов, чтобы не создавать новые таблицы в Галактике и не посылать документ в рабочее место пользователя. Возможно ли как-то программно добавить в модуль свой документ?
Re: Добавление документа в модуль
Добавлено: 17 июн 2010, 17:48
RAJAH
Можно меню отредактировать в "Консоли управления", но я уже давно вместо этого закидываю свои разработки в "Отчёты пользователя" разных модулей.
Re: Добавление документа в модуль
Добавлено: 17 июн 2010, 17:54
BlazeBio
А дополнительный пункт в меню модуля можно же создать как-то? Существуют же функции по добавлению меню.
Re: Добавление документа в модуль
Добавлено: 17 июн 2010, 17:59
RAJAH
RAJAH писал(а):Можно меню отредактировать в "Консоли управления"
"Отчёты пользователя" - гораздо удобнее.
Re: Добавление документа в модуль
Добавлено: 17 июн 2010, 18:04
BlazeBio
Вы предлагаете создавать отчёт, а из него вызывать фейс и подключать ресурсник через консоль управления. Так я пониманию?
Re: Добавление документа в модуль
Добавлено: 17 июн 2010, 18:52
m0p3e
Возможность менять стандартные менюшки есть. Можно через консоль управления (где-то на форуме было). Можно через функции (добавление пункта меню в кадровом приказе на прием):
Код: Выделить всё
var iMenu : LongInt;
DeleteMenuHowDynamics ( 'Z_STAFF::RPD_PR1' );
iMenu := LoadMenuEx ( 'Z_STAFF::RPD_PR1',true,false);
AddMenuItem ( iMenu, 'separator', 666 );
AddMenuItem ( iMenu, 'Общие сведения по сотруднику', cmValue30 );
StoreMenuHowDynamics ( iMenu,'Z_STAFF::RPD_PR1' );
DisposeLoadMenu ( iMenu );
ReinitHeaderMenu;
Для отчетов лучше использовать "Отчеты пользователя".
Re: Добавление документа в модуль
Добавлено: 18 июн 2010, 12:49
BlazeBio
Скомпилил твой исходник только сегодня, m0p3e (Админ вчера угробил тестовую базу, пришлось компилить в рабочей). Работает. А можно как-то сделать,чтобы меню добавлялось при выборе модуля или по умолчанию как-то по cmInit?
Re: Добавление документа в модуль
Добавлено: 18 июн 2010, 13:19
edward_K
есть такой загадочный фейс C_COMMON::SMH_GALNET
он реализует C_COMMON::ISwitchModuleHook
Код: Выделить всё
Function EnterModule (aModule : String) : Boolean;
Вход в модуль
Procedure ExitModule (aModule : String);
Выход из модуля
Procedure GalnetInitApp;
Перед входом в Галактику.
Весь полученный код плиз сюда.
Re: Добавление документа в модуль
Добавлено: 18 июн 2010, 13:28
m0p3e
А можно как-то сделать,чтобы меню добавлялось при выборе модуля или по умолчанию как-то по cmInit?
Большого смысла нет. Код достаточно выполнить один раз. После данных действий измененная менюшка будет сохранена в БД (x$resources записи с XR$TYPE=3, XR$NAME='MENU <Модуль::Имя меню>') и по умолчанию будет грузиться оттуда у всех пользователей.
Я бы даже сказал что постоянное выполнение этого кода вредно. Выполнять нужно после установки патчей на случай изменения исходной менюшки.
Re: Добавление документа в модуль
Добавлено: 18 июн 2010, 13:36
BlazeBio
Вот исходник(тестовый),
edward_k.
Код: Выделить всё
Interface AddMenu 'Добавление меню';
Show at (25, 10, 40, 16);
const
cmDoSomething = 3440;
cmAddDMenu = 3003;
cmDelDMenu = 3004;
cmSotrudnik = 3005;
end;
create view;
screen AddMenuScreen;
buttons
cmAddDMenu;
cmDelDMenu;
<<
<. Добавить .> <. Удалить .>
>>
end;
//------------------------------------------------
handleEvent
cmInit:
{
//inherited ::handleEvent(cmInit);
var iMenu : LongInt;
DeleteMenuHowDynamics ( 'Z_STAFF::RPD_PR1' );
iMenu := LoadMenuEx ( 'Z_STAFF::RPD_PR1',true,false);
AddMenuItem ( iMenu, 'separator', 666 );
AddMenuItem ( iMenu, 'Общие сведения по сотруднику', cmSotrudnik);
StoreMenuHowDynamics ( iMenu,'Z_STAFF::RPD_PR1' );
DisposeLoadMenu ( iMenu );
ReinitHeaderMenu;
/*DeleteMenuHowDynamics ( 'L_SKLAD::SklRep' );
iMenu := LoadMenuEx ( 'L_SKLAD::SklRep',true,false);
AddMenuItem ( iMenu, 'separator', 666 );
AddMenuItem ( iMenu, 'Общие сведения по сотруднику', cmSotrudnik);
DeleteMenuHowDynamics('Общие сведения по сотруднику');
StoreMenuHowDynamics ( iMenu,'L_SKLAD::SklRep');
DisposeLoadMenu ( iMenu );
ReinitHeaderMenu;*/
}
cmAddDMenu:
{
//--Добавление нового пункта меню в Складской учет подменю Отчеты
var m : longint;
m := LoadMenu('L_SKLAD::SklRep');
AddMenuItem(m, 'Левый пункт меню', cmDoSomething);
StoreMenuHowDynamics (m, 'L_SKLAD::SklRep');
DisposeLoadMenu (m);
ReinitHeaderMenu;
}
cmDelDMenu:
{
DeleteMenuHowDynamics ('L_SKLAD::SklRep');
ReinitHeaderMenu;
}
cmDoSomething:
{
message('Вы выбрали левый пункт меню :)');
}
cmSotrudnik:
{
message('Инфо сотрудника');
}
end;
end.
планируется фейс (Производственный план) со списком планов, который будет вызываться через меню (Производственный план), пока неизвестно в какой модуле (но это не главное). Главное суть в том, как сделать, чтобы этот добавленный фейс(документ) фигурировал в Настройка/Заполнение каталогов/Документы системы.
Кстати,
m0p3е, недавно произодилась установка патча.
Re: Добавление документа в модуль
Добавлено: 18 июн 2010, 13:45
edward_K
в базе хранить плохо.
Интересно добавить именно в общее, да еще бы так, чтобы протект на него работал.
В качестве альтернативы еше рассмотрите "партнерский модуль" и "рабочее место".
На партнерский модуль нужно запросить лицензии(они были бесплатные ), а потом компилите свою менюшку как хотите.
"рабочее место" сохраняет в x$resource, но есть возможность выгрузить (правда при переходе с 712 на 810 все потеряли из-за смены формата). Из-за выше упомянутого фейса часть функционала работать не будет(или будет но плохо - в основном зарплата и производство) - раньше бывали с ними проблемы, но может уже и починили.
Re: Добавление документа в модуль
Добавлено: 18 июн 2010, 14:27
BlazeBio
edward_K писал:
Function EnterModule (aModule : String) : Boolean;
есть такой загадочный фейс C_COMMON::SMH_GALNET
он реализует C_COMMON::ISwitchModuleHook
Код: Выделить всё
Function EnterModule (aModule : String) : Boolean;
Вход в модуль
Procedure ExitModule (aModule : String);
Выход из модуля
Procedure GalnetInitApp;
Перед входом в Галактику.
И если можно предоставьте пожалуйста информацию по EnterModule, ExitModule и т.д, о . О них я нигде информации не нахожу.
Также у нас нет партнёрского модуля, а рабочее место рассматривается как крайний вариант. А вот вы говорите о C_COMMON.RES (можно подробнее). Где находится это самое "Общее"?
Re: Добавление документа в модуль
Добавлено: 18 июн 2010, 15:13
m0p3e
в базе хранить плохо.
Ничего плохого. Работает очень даже успешно. Тот же РМП в x$resouses поселился и ничего.
Консоль администратора меню показывает новое.
Re: Добавление документа в модуль
Добавлено: 18 июн 2010, 16:04
edward_K
BlazeBio писал(а):
И если можно предоставьте пожалуйста информацию по EnterModule, ExitModule и т.д, о . О них я нигде информации не нахожу.
Также у нас нет партнёрского модуля, а рабочее место рассматривается как крайний вариант. А вот вы говорите о C_COMMON.RES (можно подробнее). Где находится это самое "Общее"?
exe\galdoc\C_COMMON.chm
на вход поступает имя модуля.
Re: Добавление документа в модуль
Добавлено: 18 июн 2010, 17:30
m0p3e
Добавление в главное меню:
Код: Выделить всё
#ifdef ComponentVersion
#component "Z_STAFFMENU"
#end
Interface ChangeStaffMenu;
View select * from x$resources;
HandleEvent
cmInit :
{
If Message ( 'Изменить меню модуля кадры?', YesNo ) = cmYes
{
var iMenu, SubMenu : LongInt;
DeleteMenuHowDynamics ( 'Z_STAFFMENU::STAFFDATABASEMENU' );
iMenu := LoadMenuEx ( 'Z_STAFFMENU::STAFFDATABASEMENU',true,false);
SubMenu := LoadMenu ( 'Z_STAFFMENU::MYSTAFFMENU' );
//AddSubMenu ( iMenu, SubMenu, 'Мое новое подменю','','' );
ConCatMenu ( iMenu, SubMenu );
StoreMenuHowDynamics ( iMenu,'Z_STAFFMENU::STAFFDATABASEMENU' );
DisposeLoadMenu ( iMenu );
ReinitHeaderMenu;
};
Abort;
}; //cmInit
End;
END.
MyStaffMenu Menu
{
- 'Приказы (прием на работу)', cmRunInterface ( 'Z_STAFF::Prikaz' );
}
В протекте новый пункт видно.