Страница 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' );
}
В протекте новый пункт видно.