В сети стоит Галактика 5,84. В каталоге GALSRV находится сразу несколько каталогов с данными: DATA, DATA1, DATA2, DATA3. Изначально была дна база просто DATA. В связи с реорганизацией, сделали три копии этой самой даты, почистили лишние документы, вроде все ок.
Но в каждой базе, кроме первой путь на пат формы генерится на такой: \\DC1\GALSRV\DATA1\PAT.
Хотя рельно они лежат в каталоге \\DC1\GALSRV\PAT.
Как-то можно настроить, чтобы во всех базах на пат-формы был один путь?
Путь на пат-формы
Модераторы: m0p3e, edward_K, Модераторы
Re: Путь на пат-формы
Вообще все пути PAT лежат в базе в каталоге D_BB файл qbmain.dat. Насколько я знаю...
-
- Постоянный гость
- Сообщения: 68
- Зарегистрирован: 29 мар 2005, 17:49
Re: Путь на пат-формы
Пути в этом интерфейсе
interface QBMAIN 'Р А З Д Е Л Ы' escclose, cyan;
show at(8,1,62,14);
create view tab_1
var
myCurRepNo : comp; // консолидация баз данных
myPlansNo : comp; // текущий план счетов
TuneObj : word; //
Dat_M_Ot : date;
myKodCurRep : longint; // код консолидированного отчета
TipSys : longint;
myl : longint;
mystr, sExcelName : string;
DATAPath, OUTPath: string;
as select
QbMain.* ,QbMainR.* ,QbMainS.*
from
synonym QbMain QbMainR,
synonym QbMain QbMainS,
PlansSch(ReadOnly),
CurRep(ReadOnly),
SpCurRep(ReadOnly),
Filial(ReadOnly),
QbMain (QbMain02)
where
((
myCurRepNo == CurRep.NRec and
myPlansNo == PlansSch.NRec and
myKodCurRep == QbMain.KodCurRep and
myPlansNo == QbMain.cPlansSch and
TipSys == QbMain.NumSys and
longint(0) == QbMain.NumRazdel and
longint(0) == QbMain.NumPage and
( QbMain.NumGlav <> longint(0) ) and
myKodCurRep == QbMainR.KodCurRep and
myPlansNo == QbMainR.cPlansSch and
QbMain.NumSys == QbMainR.NumSys and
QbMain.NumGlav == QbMainR.NumGlav and
longint(0) == QbMainR.NumPage and
( QbMainR.NumRazdel <> longint(0) ) and
myKodCurRep == QbMainS.KodCurRep and
myPlansNo == QbMainS.cPlansSch and
QbMainR.NumSys == QbMainS.NumSys and
QbMainR.NumGlav == QbMainS.NumGlav and
QbMainR.NumRazdel == QbMainS.NumRazdel and
( QbMainS.NumPage <> longint(0) )
));
parameters
TipSys; // системный тип
// расчеты бух. отчетности или просто бланки
file fPatVarsBat;
#include gettune2.vpp
#include settune0.vpp // модификация настройки Usera
/*******************************************************************************
CreateAndStartPatVarsBat - создаёт в OUT\ - дитректории и запускает
файл PATVARS.BAT, который открывает Excel - документы
********************************************************************************/
procedure CreateAndStartPatVarsBat(sExcelName: string);
//var
// IsWinNT : boolean;
{
ExecProgram('','"'+sExcelName+'"','Запуск отчета',pfDontWait);
ExecProgram('','"'+OUTPath+'patvars.xls'+'"','Запуск листа данных',pfDontWait);
/*
ПИР 102.9212
*/
/*
Это можно убить после выхода и тестирования декабрьского релиза 5.73
IsWinNT := (UpCase(Trim(GetEnvVar('OS')))='WINDOWS_NT'); // NT или 95/98?
fPatVarsBat.OpenFile(OUTPath + 'PATVARS.BAT', stCreate);
fPatVarsBat.WriteLn('@echo off');
fPatVarsBat.WriteLn('@start ' + sExcelName);
fPatVarsBat.WriteLn('@start ' + OUTPath + 'patvars.xls');
fPatVarsBat.Close;
if (Length(Trim(GetEnvVar('COMSPEC'))) > 0) {
ExecProgram(GetEnvVar('COMSPEC') , '/C ' + if(IsWinNT, 'CMD.EXE /C ', '') + OUTPath + 'PATVARS.BAT',
'Запуск PAT в Excel - формате', pfDontWait);
}
else {
ExecProgram(OUTPath + 'PATVARS.BAT', '', 'Запуск PAT в Excel - формате', pfDontWait);
}
*/
} // procedure CreateAndStartPatVarsBat
procedure GetMyPlansNo; // перейти на другой план счетов
{
if (not UpDateTable)
{
message(''#3'Перед сменой режима заполните' + ''#13#3'корректно текущую запись.', okButton);
Exit;
}
ReSetBounds(#QbMain);
runinterface('GetPlansSch',myPlansNo);
SetBounds(#QbMain);
SetNewPlansNo;
ReReadRecord;
}
function AddSlash(PathName: string): string;
{
if (Length(PathName) > 0)
AddSlash := if(SubStr(PathName, Length(PathName),1) <> '\', PathName + '\', PathName)
else
AddSlash := '';
} // function AddSlash
function GetNameBlank(var NewName : string[76]) : boolean;
var myb : boolean;
{
GetNameBlank := false;
do
{ myb := true;
if (RunDialog('GetNamePole', NewName) = cmCancel) Exit;
NewName := trim(NewName);
if (NewName = '') myb := false;
}
while (not myb);
GetNameBlank := true;
}
//................... Страницы документов .........................
window Page 'С Т Р А Н И Ц Ы' escclose, cyan;
show at(30,5,74,13);
panel pQbMainS table QbMainS;
browse brPageBO;
fields
QbMainS_NumPage 'N стр' (,hcBalMBuhOtch, scDocumPage) : [2];
QbMainS_NameGlav 'имя файла'(,hcBalMBuhOtch, scDocumPage) : [37], protect;
end;
browse brPageB;
fields
QbMainS_NumPage 'N стр' (,hcBalMBuhOtch, scDocumPage) : [2];
QbMainS_NameGlav 'имя файла'(,hcBalMBuhOtch, scDocumPage) : [37], protect;
end;
Handleevent
cmSetDefault :
{ PushPos(#QbMainS);
ReSetBounds(#QbMainS);
if (modifier getlast QbMainS
where (( myKodCurRep == QbmainS.KodCurRep and
myPlansNo == QbmainS.cPlansSch and
QbMainR.NumSys == QbMainS.NumSys and
QbMainR.NumGlav == QbMainS.NumGlav and
QbMainR.NumRazdel == QbMainS.NumRazdel
)) ordered by QbMainS.NumPage = 0)
myl := QbMainS.NumPage + 1;
else
myl := 1;
SetBounds(#QbMainS);
PopPos(#QbMainS);
ClearBuffer(#QbMainS);
QbMainS.NRec := 0;
QbMainS.KodCurRep := myKodCurRep;
QbMainS.cPlansSch := myPlansNo;
QbMainS.NumSys := QbMainR.NumSys;
QbMainS.NumGlav := QbMainR.NumGlav;
QbMainS.NumRazdel := QbMainR.NumRazdel;
QbMainS.NumPage := myl;
mystr := HandleBlanki('',cmSetDefault,tipSys,myPlansNo);
if (mystr <> '')
set QbMainS.NameGlav := mystr;
}
cmCheckRecord :
{
QbMainS.NameGlav := trim(QbMainS.NameGlav);
if (QbMainS.NameGlav = '')
{
message(''#3'Не задано имя файла.' +
''#13#3'Определите значение или удалите запись.', okButton);
Abort;
}
}
cmInsertRecord :
insert current QbMainS;
cmUpdateRecord :
update current QbMainS;
cmDeleteRecord :
if (message(''#3'Удалить текущую страницу?',YesNo) = yes)
{
mystr := HandleBlanki(QbMainS.NameGlav,cmDeleteRecord,tipSys,myPlansNo);
delete current QbMainS;
}
else abort;
end;
end;
Handleevent
cmInit :
case TipSys of
0..10 : // балансы по филиалам
SetFormat(brPageBO);
11..19 : // просто бланки
SetFormat(brPageB);
20..29 : // консолидированные отчеты
SetFormat(brPageBO);
end;
cmDoPageFile :
{ mystr := HandleBlanki(QbMainS.NameGlav,cmDoPageFile,tipSys,myPlansNo);
if (mystr <> QbMainS.NameGlav)
set QbMainS.NameGlav := mystr;
}
cmDefault : mystr := HandleBlanki(QbMainS.NameGlav,cmDoPageRasch,tipSys,myPlansNo);
cmDoPageEdit : mystr := HandleBlanki(QbMainS.NameGlav,cmDoPageEdit,tipSys,myPlansNo);
cmBuhCalculator :
RunInterface('Buh_Calc');
cmHotKeys :
PutHotCommand(RunMenu('QbMainP_HotKeys'));
end;
end; // window Page
//................... Документы разделов .........................
window Razdel 'Д О К У М Е Н Т Ы' escclose, cyan;
show at(15,3,69,25);
panel pQbMainR table QbMainR;
browse brRazdBO show at (,,,15);
fields
QbMainR_NameGlav (, hcBalMBuhOtch, scDocumRazd) : [50], protect;
end;
browse brRazdB show at (,,,15);
fields
QbMainR_NameGlav (, hcBalMBuhOtch, scDocumRazd) : [50], protect;
end;
screen scExcelName (,hcBalMBuhOtchExcel,scDocumRazd)
show at (,16,,)
fields
QbMainR.ExcelName;
Dat_M_Ot : [,'DD/MM/YYYY'], NoProtect;
buttons
cmChooseExcelTable;
cmRunExcel;
<<
Имя Excel - таблицы .@@@@@@@@@@@@@@@@@@@@@@@@@@@
Отчетный месяц с .@@@@@@@@@@@@@@@
<. Изменить... .> <. ~В~ызвать Excel... .>
>>
end;
procedure SwitchExcelButton;
{
if (Length(QbMainR.ExcelName) <> 0)
{
SelectableButton(scExcelName, cmRunExcel, true);
}
else
{
SelectableButton(scExcelName, cmRunExcel, false);
}
}
Handleevent
cmSetDefault :
{
PushPos(#QbMainR);
ReSetBounds(#QbMainR);
if (modifier GetLast QbMainR
where ((
myKodCurRep == QbmainR.KodCurRep and
myPlansNo == QbmainR.cPlansSch and
QbMain.NumSys == QbMainR.NumSys and
QbMain.NumGlav == QbMainR.NumGlav
)) ordered by QbMainR.NumRazdel = 0)
myl := QbMainR.NumRazdel + 1;
else
myl := 1;
SetBounds(#QbMainR);
PopPos(#QbMainR);
ClearBuffer(#QbMainR);
QbMainR.NRec := 0;
QbMainR.KodCurRep := myKodCurRep;
QbMainR.cPlansSch := myPlansNo;
QbMainR.NumSys := QbMain.NumSys;
QbMainR.NumGlav := QbMain.NumGlav;
QbMainR.NumRazdel := myl;
QbMainR.NumPage := 0;
QbMainR.NameGlav := '';
PutCommand(cmValue1);
SwitchExcelButton;
}
cmCheckField :
{
case (CurField) of
#DAT_M_OT:
{
DAT_M_OT:=date(1,month(DAT_M_OT),year(DAT_M_OT))
SetTuneEx('Dat_M_Ot',TuneObj,0,DAT_M_OT);
}
#QbMainR_NameGlav:
{
if (QbMainR.NameGlav = '')
{
message(''#3'Не задано наименование документа.' +
''#13#3'Определите значение или удалите запись.', okButton);
Abort;
}
}
#QbMainR_ExcelName:
{
if (QbMainR.ExcelName <> '')
if (not FileExist(Trim(if(Pos(':\', QbMainR.ExcelName) <> 0, QbMainR.ExcelName, DATAPath + QbMainR.ExcelName))))
{
Message(''#3'Файл с именем ' + QbMainR.ExcelName + ' не существует.', OkButton);
Abort;
}
}
end;
}
cmPositionChanged:
{
SwitchExcelButton;
}
cmInsertRecord :
{
insert current QbMainR;
SwitchExcelButton;
}
cmUpdateRecord :
{
update current QbMainR;
SwitchExcelButton;
}
cmDeleteRecord :
if (message(''#3'Удалить текущий документ?', YesNo) = yes)
{
if (modifier GetFirst QbMainS = tsOk)
do
{
mystr := HandleBlanki(QbMainS.NameGlav,cmDeleteRecord,tipSys,myPlansNo);
}
while (modifier GetNext QbMainS = tsOk)
delete QbMainS;
delete current QbMainR;
}
else abort;
end;
end;
Handleevent
cmInit :
{
case TipSys of
0..10 : // балансы по филиалам
SetFormat(brRazdBO);
11..19 : // просто бланки
SetFormat(brRazdB);
20..29 : // консолидированные отчеты
SetFormat(brRazdBO);
end;
Dat_M_Ot := dGetTuneEx('Dat_M_Ot',TuneObj,0);
}
cmDone:
{
StartNewVisual(vtNumericVisual, vfTimer, 'Очистка локального каталога '+OUTPath+' от сформированнных отчетов...'#13#3,1);
fPatVarsBat.OpenFile(OUTPath + 'PATVARS.BAT', stCreate);
fPatVarsBat.WriteLn('@echo off');
fPatVarsBat.WriteLn('pause');
fPatVarsBat.WriteLn('del *.out');
fPatVarsBat.WriteLn('del *.xls');
fPatVarsBat.Close;
ExecProgram(GetEnvVar('COMSPEC') , '/C ' + 'CMD.EXE /C ' + OUTPath + 'PATVARS.BAT', 'Очистка каталога с временными отчетами', pfDontWait);
StopVisual('',0);
}
cmRunExcel:
{
var bWasUploaded: boolean; // произошла выгрузка для Excel
var FirstList : boolean; // первый лист ли считаем, чтобы сказать,
// убивать ли DBF
bWasUploaded := false;
if (Length(QbMainR.ExcelName) <> 0)
{
// Расчет по всем листам
// !!! c 21.10.1999 выгрузка в DBF происходит сразу при расчете
// без дополнительных таблиц PatVars и PatSpec
FirstList := true;
if (modifier GetFirst QbMainS = tsOk)
do {
if (FirstList) {
// чтобы показать, что в первый раз
MyStr := HandleBlanki(QbMainS.NameGlav,cmChooseExcelTable,tipSys,myPlansNo);
}
else {
MyStr := HandleBlanki(QbMainS.NameGlav,cmRunExcel,tipSys,myPlansNo);
}
if (Length(Trim(myStr)) <> 0)
bWasUploaded := true;
FirstList := false;
}
while (modifier GetNext QbMainS = tsOk);
if bWasUploaded
{
var RealExcelName : string;
var RealExcelNameLocal : string;
RealExcelName := if(Pos(':\', QbMainR.ExcelName) <> 0, QbMainR.ExcelName, DATAPath + QbMainR.ExcelName);
//ЗАБИРАЕМ ФАЙЛ С СЕРВЕРА GALPRO 04/2004 Переделка разграничения доступа к пат отчетам
!================
RealExcelNameLocal := OUTPath + replace(QbMainR.ExcelName,'\','');
! RealExcelNameLocal := CreateUniqueFileName(TemporaryDirectory)+'.xls'; // так фигачит в вистемный темп
! RealExcelNameLocal := CreateUniqueFileName(OUTPath)+'.xls';
if( CopyMoveFile(RealExcelName,RealExcelNameLocal,False) ) { CreateAndStartPatVarsBat(RealExcelNameLocal); }
else { message('Ошибка копирования из '+RealExcelName+' в '+RealExcelNameLocal+'! (QbMain.vip 407)'); }
!================
}
else
Message(''#3'Данные для Excel не были выгружены.'#13 +
''#3'Возможно не определен идентификатор отчёта.',Error);
}
}
cmChooseExcelTable:
{
sExcelName := GetFileName(DATAPath+'PAT\*.xls', 'Excel - таблица');
if sExcelName <> ''
{
if (SubStr(UpCase(sExcelName),1,Length(DATAPath)) = UpCase(Trim(DATAPath)))
sExcelName := SubStr(sExcelName , Length(DATAPath) + 1, Length(sExcelName) - Length(DATAPath));
set QbMainR.ExcelName := sExcelName ;
UpdateTable;
}
}
cmZamena :
if (isValid(#QbMainR)) {
if (GetNameBlank(QbMainR.NameGlav))
set QbMainR.NameGlav := QbMainR.NameGlav;
}
cmDoRazdPage :
{
if (CurField = #QBMainR_ExcelName)
{
PutCommand(cmChooseExcelTable);
}
else
if ((UpDateTable) and (QbMainR.NameGlav <> ''))
runwindow(Page)
}
cmDefault :
if (modifier GetFirst QbMainS = tsOk)
{
do
{
mystr := HandleBlanki(QbMainS.NameGlav,cmDoRazdRasch,tipSys,myPlansNo);
}
while (modifier GetNext QbMainS = tsOk);
}
else
message(''#3'В документе' +
''#13#3'' + SubStr(QbMainR.NameGlav,1,35) + '...' +
''#13#3'нет ни одной страницы.', okButton);
cmDoRazdEdit :
if (modifier GetFirst QbMainS = tsOk)
do
{
mystr := HandleBlanki(QbMainS.NameGlav,cmDoRazdEdit,tipSys,myPlansNo);
}
while (modifier GetNext QbMainS = tsOk)
else
message(''#3'В документе' +
''#13#3'' + SubStr(QbMainR.NameGlav,1,35) + '...' +
''#13#3'нет ни одной страницы.', okButton);
cmValue1 :
{
if (GetNameBlank(QbMainR.NameGlav))
set QbMainR.NameGlav := QbMainR.NameGlav;
if ((QbMainR.NameGlav <> '') and
(UpDateTable))
{ RunWindow(Page);
Stop;
}
}
cmBuhCalculator :
RunInterface('Buh_Calc');
cmHotKeys :
PutHotCommand(RunMenu('QbMainD_HotKeys'));
end;
end; //window
//................... Сами разделы.................................
panel pQbmain table QbMain ;
browse brDocBO;
fields
QbMain_NameGlav ('', hcBalMBuhOtch, scDocumDoc) : [50], protect;
end;
browse brDocB;
fields
QbMain_NameGlav ('', hcBalMBuhOtch, scDocumDoc) : [50], protect;
end;
Handleevent
cmSetDefault :
{ PushPos(#QbMain);
ReSetBounds(#QbMain);
if (modifier getlast QbMain
where (( myKodCurRep == Qbmain.KodCurRep and
myPlansNo == Qbmain.cPlansSch and
TipSys == QbMain.NumSys
)) ordered by QbMain.NumGlav = 0)
myl := QbMain.NumGlav + 1;
else
myl := 1;
SetBounds(#QbMain);
PopPos(#QbMain);
ClearBuffer(#QbMain);
QbMain.NRec := 0;
QbMain.KodCurRep := myKodCurRep;
QbMain.cPlansSch := myPlansNo;
QbMain.NumSys := TipSys;
QbMain.NumGlav := myl;
QbMain.NumRazdel := 0;
QbMain.NumPage := 0;
QbMain.NameGlav := '';
PutCommand(cmZamena);
}
cmZamena :
if (QbMain.NumGlav <> 0) {
if (GetNameBlank(QbMain.NameGlav))
set QbMain.NameGlav := QbMain.NameGlav;
}
cmDefault :
if ((UpDateTable) and (QbMain.NameGlav <> ''))
runwindow(Razdel);
cmCheckRecord :
if (QbMain.NameGlav = '')
{ message(''#3'Не задано наименование раздела.' +
''#13#3'Определите значение поля или удалите запись.', okButton);
Abort;
}
cmInsertRecord :
insert current QbMain;
cmUpdateRecord :
update current QbMain;
cmDeleteRecord :
if (message(''#3'Удалить текущий раздел?', YesNo) = yes)
{
if (modifier GetFirst QbMainR = tsOk)
do
{
if (modifier GetFirst QbMainS = tsOk)
do
{
mystr := HandleBlanki(QbMainS.NameGlav,cmDeleteRecord,tipSys,myPlansNo);
}
while (modifier GetNext QbMainS = tsOk);
delete QbMainS;
}
while (modifier GetNext QbMainR = tsOk)
delete QbMainR;
delete current QbMain;
}
else abort;
end;
end;
HandleEvent
cmInit :
{ if (not GetUserTuneParam) { Abort; Exit; }
myCurRepNo := coGetTune('Konsolid.User.cCurRep');
if (myCurRepNo = 0) myCurRepNo := coGetTune('Konsolid.cCurRep');
if (modifier GetFirst CurRep where ((myCurRepNo == CurRep.NRec)) = tsOk)
myKodCurRep := CurRep.Kod
else
{
message(''#3'Не могу установить код' +
''#13#3'текущей консолидации баз данных!' +
''#13#3'Проведите настройку.',okButton);
Abort;
Exit;
}
DATAPath := GetDirectoryPat; // DirPat из OutPath.pas
DATAPath := SubStr(DATAPath,1,length(DATAPath) - 4); // убиваем 'PAT\'
OUTPath := AddSlash(GetStringParameter('Files','OutputFilesDirectory',0));
case TipSys of
0..10 : // балансы по филиалам
{ SetFormat(brDocBO);
SetWindowTitle(wnMainWindow,'Р А З Д Е Л Ы ( ' + Filial.Name + ' )');
}
11..19 : // просто бланки
{ myPlansNo := 0;
SetFormat(brDocB);
}
20..29 : // консолидированные отчеты
{ SetFormat(brDocBO);
SetWindowTitle(wnMainWindow,'Р А З Д Е Л Ы ( ' + CurRep.Name + ' )');
}
else
{ message(''#3'Некорректны входные параметры!',okButton);
Abort;
Exit;
}
end;
}
cmPlansNo : // перейти на другой план счетов
case TipSys of
0..10, 20..29 : GetMyPlansNo;
end;
cmBuhCalculator :
RunInterface('Buh_Calc');
cmHotKeys :
PutHotCommand(RunMenu('QbMainR_HotKeys'));
end;
end.
//-------------------------------------------------------------------------
QbMainR_HotKeys Menu
{
- 'Корректировка имени',cmZamena,'Корректировка имени раздела бланков или докуменнта',hcHotKeyQbName,'F2',kbF2,sci1Esc;
--------------;
- 'Бухгалтерский калькулятор',cmBuhCalculator,'Расчеты сумм оборотов, проводок и сальдо по счетам бухгалтерского учета ',hcBuh_Calculator,'Shift-F3',kbShiftF3,sci1Esc;
- 'Смена плана счетов',cmPlansNo,'Смена текущего плана счетов',hcKonsM1PlanSch,'Alt-P',kbAltP,sci1Esc;
}
QbMainD_HotKeys Menu
{
- 'Редактирование документа',cmDoRazdEdit,'Просмотр и редактирование документа по страницам',hcHotKeyQbEdit,'F4',kbF4,sci1Esc;
- 'Страницы документа ',cmDoRazdPage,'Просмотр и редактирование документа по страницам',hcHotKeyQbPage,'F3',kbF3,sci1Esc;
--------------;
- 'Корректировка имени',cmZamena,'Корректировка имени раздела бланков или докуменнта',hcHotKeyQbName,'F2',kbF2,sci1Esc;
--------------;
- 'Бухгалтерский калькулятор',cmBuhCalculator,'Расчеты сумм оборотов, проводок и сальдо по счетам бухгалтерского учета ',hcBuh_Calculator,'Shift-F3',kbShiftF3,sci1Esc;
}
QbMainP_HotKeys Menu
{
- 'Редактирование страницы',cmDoPageEdit,'Просмотр и редактирование документа по страницам',hcHotKeyQbEdit,'F4',kbF4,sci1Esc;
- 'Замена страницы документа ',cmDoPageFile,'Замена страницы документа',hcHotKeyQbZamena,'F3',kbF3,sci1Esc;
--------------;
- 'Бухгалтерский калькулятор',cmBuhCalculator,'Расчеты сумм оборотов, проводок и сальдо по счетам бухгалтерского учета ',hcBuh_Calculator,'Shift-F3',kbShiftF3,sci1Esc;
}
interface QBMAIN 'Р А З Д Е Л Ы' escclose, cyan;
show at(8,1,62,14);
create view tab_1
var
myCurRepNo : comp; // консолидация баз данных
myPlansNo : comp; // текущий план счетов
TuneObj : word; //
Dat_M_Ot : date;
myKodCurRep : longint; // код консолидированного отчета
TipSys : longint;
myl : longint;
mystr, sExcelName : string;
DATAPath, OUTPath: string;
as select
QbMain.* ,QbMainR.* ,QbMainS.*
from
synonym QbMain QbMainR,
synonym QbMain QbMainS,
PlansSch(ReadOnly),
CurRep(ReadOnly),
SpCurRep(ReadOnly),
Filial(ReadOnly),
QbMain (QbMain02)
where
((
myCurRepNo == CurRep.NRec and
myPlansNo == PlansSch.NRec and
myKodCurRep == QbMain.KodCurRep and
myPlansNo == QbMain.cPlansSch and
TipSys == QbMain.NumSys and
longint(0) == QbMain.NumRazdel and
longint(0) == QbMain.NumPage and
( QbMain.NumGlav <> longint(0) ) and
myKodCurRep == QbMainR.KodCurRep and
myPlansNo == QbMainR.cPlansSch and
QbMain.NumSys == QbMainR.NumSys and
QbMain.NumGlav == QbMainR.NumGlav and
longint(0) == QbMainR.NumPage and
( QbMainR.NumRazdel <> longint(0) ) and
myKodCurRep == QbMainS.KodCurRep and
myPlansNo == QbMainS.cPlansSch and
QbMainR.NumSys == QbMainS.NumSys and
QbMainR.NumGlav == QbMainS.NumGlav and
QbMainR.NumRazdel == QbMainS.NumRazdel and
( QbMainS.NumPage <> longint(0) )
));
parameters
TipSys; // системный тип
// расчеты бух. отчетности или просто бланки
file fPatVarsBat;
#include gettune2.vpp
#include settune0.vpp // модификация настройки Usera
/*******************************************************************************
CreateAndStartPatVarsBat - создаёт в OUT\ - дитректории и запускает
файл PATVARS.BAT, который открывает Excel - документы
********************************************************************************/
procedure CreateAndStartPatVarsBat(sExcelName: string);
//var
// IsWinNT : boolean;
{
ExecProgram('','"'+sExcelName+'"','Запуск отчета',pfDontWait);
ExecProgram('','"'+OUTPath+'patvars.xls'+'"','Запуск листа данных',pfDontWait);
/*
ПИР 102.9212
*/
/*
Это можно убить после выхода и тестирования декабрьского релиза 5.73
IsWinNT := (UpCase(Trim(GetEnvVar('OS')))='WINDOWS_NT'); // NT или 95/98?
fPatVarsBat.OpenFile(OUTPath + 'PATVARS.BAT', stCreate);
fPatVarsBat.WriteLn('@echo off');
fPatVarsBat.WriteLn('@start ' + sExcelName);
fPatVarsBat.WriteLn('@start ' + OUTPath + 'patvars.xls');
fPatVarsBat.Close;
if (Length(Trim(GetEnvVar('COMSPEC'))) > 0) {
ExecProgram(GetEnvVar('COMSPEC') , '/C ' + if(IsWinNT, 'CMD.EXE /C ', '') + OUTPath + 'PATVARS.BAT',
'Запуск PAT в Excel - формате', pfDontWait);
}
else {
ExecProgram(OUTPath + 'PATVARS.BAT', '', 'Запуск PAT в Excel - формате', pfDontWait);
}
*/
} // procedure CreateAndStartPatVarsBat
procedure GetMyPlansNo; // перейти на другой план счетов
{
if (not UpDateTable)
{
message(''#3'Перед сменой режима заполните' + ''#13#3'корректно текущую запись.', okButton);
Exit;
}
ReSetBounds(#QbMain);
runinterface('GetPlansSch',myPlansNo);
SetBounds(#QbMain);
SetNewPlansNo;
ReReadRecord;
}
function AddSlash(PathName: string): string;
{
if (Length(PathName) > 0)
AddSlash := if(SubStr(PathName, Length(PathName),1) <> '\', PathName + '\', PathName)
else
AddSlash := '';
} // function AddSlash
function GetNameBlank(var NewName : string[76]) : boolean;
var myb : boolean;
{
GetNameBlank := false;
do
{ myb := true;
if (RunDialog('GetNamePole', NewName) = cmCancel) Exit;
NewName := trim(NewName);
if (NewName = '') myb := false;
}
while (not myb);
GetNameBlank := true;
}
//................... Страницы документов .........................
window Page 'С Т Р А Н И Ц Ы' escclose, cyan;
show at(30,5,74,13);
panel pQbMainS table QbMainS;
browse brPageBO;
fields
QbMainS_NumPage 'N стр' (,hcBalMBuhOtch, scDocumPage) : [2];
QbMainS_NameGlav 'имя файла'(,hcBalMBuhOtch, scDocumPage) : [37], protect;
end;
browse brPageB;
fields
QbMainS_NumPage 'N стр' (,hcBalMBuhOtch, scDocumPage) : [2];
QbMainS_NameGlav 'имя файла'(,hcBalMBuhOtch, scDocumPage) : [37], protect;
end;
Handleevent
cmSetDefault :
{ PushPos(#QbMainS);
ReSetBounds(#QbMainS);
if (modifier getlast QbMainS
where (( myKodCurRep == QbmainS.KodCurRep and
myPlansNo == QbmainS.cPlansSch and
QbMainR.NumSys == QbMainS.NumSys and
QbMainR.NumGlav == QbMainS.NumGlav and
QbMainR.NumRazdel == QbMainS.NumRazdel
)) ordered by QbMainS.NumPage = 0)
myl := QbMainS.NumPage + 1;
else
myl := 1;
SetBounds(#QbMainS);
PopPos(#QbMainS);
ClearBuffer(#QbMainS);
QbMainS.NRec := 0;
QbMainS.KodCurRep := myKodCurRep;
QbMainS.cPlansSch := myPlansNo;
QbMainS.NumSys := QbMainR.NumSys;
QbMainS.NumGlav := QbMainR.NumGlav;
QbMainS.NumRazdel := QbMainR.NumRazdel;
QbMainS.NumPage := myl;
mystr := HandleBlanki('',cmSetDefault,tipSys,myPlansNo);
if (mystr <> '')
set QbMainS.NameGlav := mystr;
}
cmCheckRecord :
{
QbMainS.NameGlav := trim(QbMainS.NameGlav);
if (QbMainS.NameGlav = '')
{
message(''#3'Не задано имя файла.' +
''#13#3'Определите значение или удалите запись.', okButton);
Abort;
}
}
cmInsertRecord :
insert current QbMainS;
cmUpdateRecord :
update current QbMainS;
cmDeleteRecord :
if (message(''#3'Удалить текущую страницу?',YesNo) = yes)
{
mystr := HandleBlanki(QbMainS.NameGlav,cmDeleteRecord,tipSys,myPlansNo);
delete current QbMainS;
}
else abort;
end;
end;
Handleevent
cmInit :
case TipSys of
0..10 : // балансы по филиалам
SetFormat(brPageBO);
11..19 : // просто бланки
SetFormat(brPageB);
20..29 : // консолидированные отчеты
SetFormat(brPageBO);
end;
cmDoPageFile :
{ mystr := HandleBlanki(QbMainS.NameGlav,cmDoPageFile,tipSys,myPlansNo);
if (mystr <> QbMainS.NameGlav)
set QbMainS.NameGlav := mystr;
}
cmDefault : mystr := HandleBlanki(QbMainS.NameGlav,cmDoPageRasch,tipSys,myPlansNo);
cmDoPageEdit : mystr := HandleBlanki(QbMainS.NameGlav,cmDoPageEdit,tipSys,myPlansNo);
cmBuhCalculator :
RunInterface('Buh_Calc');
cmHotKeys :
PutHotCommand(RunMenu('QbMainP_HotKeys'));
end;
end; // window Page
//................... Документы разделов .........................
window Razdel 'Д О К У М Е Н Т Ы' escclose, cyan;
show at(15,3,69,25);
panel pQbMainR table QbMainR;
browse brRazdBO show at (,,,15);
fields
QbMainR_NameGlav (, hcBalMBuhOtch, scDocumRazd) : [50], protect;
end;
browse brRazdB show at (,,,15);
fields
QbMainR_NameGlav (, hcBalMBuhOtch, scDocumRazd) : [50], protect;
end;
screen scExcelName (,hcBalMBuhOtchExcel,scDocumRazd)
show at (,16,,)
fields
QbMainR.ExcelName;
Dat_M_Ot : [,'DD/MM/YYYY'], NoProtect;
buttons
cmChooseExcelTable;
cmRunExcel;
<<
Имя Excel - таблицы .@@@@@@@@@@@@@@@@@@@@@@@@@@@
Отчетный месяц с .@@@@@@@@@@@@@@@
<. Изменить... .> <. ~В~ызвать Excel... .>
>>
end;
procedure SwitchExcelButton;
{
if (Length(QbMainR.ExcelName) <> 0)
{
SelectableButton(scExcelName, cmRunExcel, true);
}
else
{
SelectableButton(scExcelName, cmRunExcel, false);
}
}
Handleevent
cmSetDefault :
{
PushPos(#QbMainR);
ReSetBounds(#QbMainR);
if (modifier GetLast QbMainR
where ((
myKodCurRep == QbmainR.KodCurRep and
myPlansNo == QbmainR.cPlansSch and
QbMain.NumSys == QbMainR.NumSys and
QbMain.NumGlav == QbMainR.NumGlav
)) ordered by QbMainR.NumRazdel = 0)
myl := QbMainR.NumRazdel + 1;
else
myl := 1;
SetBounds(#QbMainR);
PopPos(#QbMainR);
ClearBuffer(#QbMainR);
QbMainR.NRec := 0;
QbMainR.KodCurRep := myKodCurRep;
QbMainR.cPlansSch := myPlansNo;
QbMainR.NumSys := QbMain.NumSys;
QbMainR.NumGlav := QbMain.NumGlav;
QbMainR.NumRazdel := myl;
QbMainR.NumPage := 0;
QbMainR.NameGlav := '';
PutCommand(cmValue1);
SwitchExcelButton;
}
cmCheckField :
{
case (CurField) of
#DAT_M_OT:
{
DAT_M_OT:=date(1,month(DAT_M_OT),year(DAT_M_OT))
SetTuneEx('Dat_M_Ot',TuneObj,0,DAT_M_OT);
}
#QbMainR_NameGlav:
{
if (QbMainR.NameGlav = '')
{
message(''#3'Не задано наименование документа.' +
''#13#3'Определите значение или удалите запись.', okButton);
Abort;
}
}
#QbMainR_ExcelName:
{
if (QbMainR.ExcelName <> '')
if (not FileExist(Trim(if(Pos(':\', QbMainR.ExcelName) <> 0, QbMainR.ExcelName, DATAPath + QbMainR.ExcelName))))
{
Message(''#3'Файл с именем ' + QbMainR.ExcelName + ' не существует.', OkButton);
Abort;
}
}
end;
}
cmPositionChanged:
{
SwitchExcelButton;
}
cmInsertRecord :
{
insert current QbMainR;
SwitchExcelButton;
}
cmUpdateRecord :
{
update current QbMainR;
SwitchExcelButton;
}
cmDeleteRecord :
if (message(''#3'Удалить текущий документ?', YesNo) = yes)
{
if (modifier GetFirst QbMainS = tsOk)
do
{
mystr := HandleBlanki(QbMainS.NameGlav,cmDeleteRecord,tipSys,myPlansNo);
}
while (modifier GetNext QbMainS = tsOk)
delete QbMainS;
delete current QbMainR;
}
else abort;
end;
end;
Handleevent
cmInit :
{
case TipSys of
0..10 : // балансы по филиалам
SetFormat(brRazdBO);
11..19 : // просто бланки
SetFormat(brRazdB);
20..29 : // консолидированные отчеты
SetFormat(brRazdBO);
end;
Dat_M_Ot := dGetTuneEx('Dat_M_Ot',TuneObj,0);
}
cmDone:
{
StartNewVisual(vtNumericVisual, vfTimer, 'Очистка локального каталога '+OUTPath+' от сформированнных отчетов...'#13#3,1);
fPatVarsBat.OpenFile(OUTPath + 'PATVARS.BAT', stCreate);
fPatVarsBat.WriteLn('@echo off');
fPatVarsBat.WriteLn('pause');
fPatVarsBat.WriteLn('del *.out');
fPatVarsBat.WriteLn('del *.xls');
fPatVarsBat.Close;
ExecProgram(GetEnvVar('COMSPEC') , '/C ' + 'CMD.EXE /C ' + OUTPath + 'PATVARS.BAT', 'Очистка каталога с временными отчетами', pfDontWait);
StopVisual('',0);
}
cmRunExcel:
{
var bWasUploaded: boolean; // произошла выгрузка для Excel
var FirstList : boolean; // первый лист ли считаем, чтобы сказать,
// убивать ли DBF
bWasUploaded := false;
if (Length(QbMainR.ExcelName) <> 0)
{
// Расчет по всем листам
// !!! c 21.10.1999 выгрузка в DBF происходит сразу при расчете
// без дополнительных таблиц PatVars и PatSpec
FirstList := true;
if (modifier GetFirst QbMainS = tsOk)
do {
if (FirstList) {
// чтобы показать, что в первый раз
MyStr := HandleBlanki(QbMainS.NameGlav,cmChooseExcelTable,tipSys,myPlansNo);
}
else {
MyStr := HandleBlanki(QbMainS.NameGlav,cmRunExcel,tipSys,myPlansNo);
}
if (Length(Trim(myStr)) <> 0)
bWasUploaded := true;
FirstList := false;
}
while (modifier GetNext QbMainS = tsOk);
if bWasUploaded
{
var RealExcelName : string;
var RealExcelNameLocal : string;
RealExcelName := if(Pos(':\', QbMainR.ExcelName) <> 0, QbMainR.ExcelName, DATAPath + QbMainR.ExcelName);
//ЗАБИРАЕМ ФАЙЛ С СЕРВЕРА GALPRO 04/2004 Переделка разграничения доступа к пат отчетам
!================
RealExcelNameLocal := OUTPath + replace(QbMainR.ExcelName,'\','');
! RealExcelNameLocal := CreateUniqueFileName(TemporaryDirectory)+'.xls'; // так фигачит в вистемный темп
! RealExcelNameLocal := CreateUniqueFileName(OUTPath)+'.xls';
if( CopyMoveFile(RealExcelName,RealExcelNameLocal,False) ) { CreateAndStartPatVarsBat(RealExcelNameLocal); }
else { message('Ошибка копирования из '+RealExcelName+' в '+RealExcelNameLocal+'! (QbMain.vip 407)'); }
!================
}
else
Message(''#3'Данные для Excel не были выгружены.'#13 +
''#3'Возможно не определен идентификатор отчёта.',Error);
}
}
cmChooseExcelTable:
{
sExcelName := GetFileName(DATAPath+'PAT\*.xls', 'Excel - таблица');
if sExcelName <> ''
{
if (SubStr(UpCase(sExcelName),1,Length(DATAPath)) = UpCase(Trim(DATAPath)))
sExcelName := SubStr(sExcelName , Length(DATAPath) + 1, Length(sExcelName) - Length(DATAPath));
set QbMainR.ExcelName := sExcelName ;
UpdateTable;
}
}
cmZamena :
if (isValid(#QbMainR)) {
if (GetNameBlank(QbMainR.NameGlav))
set QbMainR.NameGlav := QbMainR.NameGlav;
}
cmDoRazdPage :
{
if (CurField = #QBMainR_ExcelName)
{
PutCommand(cmChooseExcelTable);
}
else
if ((UpDateTable) and (QbMainR.NameGlav <> ''))
runwindow(Page)
}
cmDefault :
if (modifier GetFirst QbMainS = tsOk)
{
do
{
mystr := HandleBlanki(QbMainS.NameGlav,cmDoRazdRasch,tipSys,myPlansNo);
}
while (modifier GetNext QbMainS = tsOk);
}
else
message(''#3'В документе' +
''#13#3'' + SubStr(QbMainR.NameGlav,1,35) + '...' +
''#13#3'нет ни одной страницы.', okButton);
cmDoRazdEdit :
if (modifier GetFirst QbMainS = tsOk)
do
{
mystr := HandleBlanki(QbMainS.NameGlav,cmDoRazdEdit,tipSys,myPlansNo);
}
while (modifier GetNext QbMainS = tsOk)
else
message(''#3'В документе' +
''#13#3'' + SubStr(QbMainR.NameGlav,1,35) + '...' +
''#13#3'нет ни одной страницы.', okButton);
cmValue1 :
{
if (GetNameBlank(QbMainR.NameGlav))
set QbMainR.NameGlav := QbMainR.NameGlav;
if ((QbMainR.NameGlav <> '') and
(UpDateTable))
{ RunWindow(Page);
Stop;
}
}
cmBuhCalculator :
RunInterface('Buh_Calc');
cmHotKeys :
PutHotCommand(RunMenu('QbMainD_HotKeys'));
end;
end; //window
//................... Сами разделы.................................
panel pQbmain table QbMain ;
browse brDocBO;
fields
QbMain_NameGlav ('', hcBalMBuhOtch, scDocumDoc) : [50], protect;
end;
browse brDocB;
fields
QbMain_NameGlav ('', hcBalMBuhOtch, scDocumDoc) : [50], protect;
end;
Handleevent
cmSetDefault :
{ PushPos(#QbMain);
ReSetBounds(#QbMain);
if (modifier getlast QbMain
where (( myKodCurRep == Qbmain.KodCurRep and
myPlansNo == Qbmain.cPlansSch and
TipSys == QbMain.NumSys
)) ordered by QbMain.NumGlav = 0)
myl := QbMain.NumGlav + 1;
else
myl := 1;
SetBounds(#QbMain);
PopPos(#QbMain);
ClearBuffer(#QbMain);
QbMain.NRec := 0;
QbMain.KodCurRep := myKodCurRep;
QbMain.cPlansSch := myPlansNo;
QbMain.NumSys := TipSys;
QbMain.NumGlav := myl;
QbMain.NumRazdel := 0;
QbMain.NumPage := 0;
QbMain.NameGlav := '';
PutCommand(cmZamena);
}
cmZamena :
if (QbMain.NumGlav <> 0) {
if (GetNameBlank(QbMain.NameGlav))
set QbMain.NameGlav := QbMain.NameGlav;
}
cmDefault :
if ((UpDateTable) and (QbMain.NameGlav <> ''))
runwindow(Razdel);
cmCheckRecord :
if (QbMain.NameGlav = '')
{ message(''#3'Не задано наименование раздела.' +
''#13#3'Определите значение поля или удалите запись.', okButton);
Abort;
}
cmInsertRecord :
insert current QbMain;
cmUpdateRecord :
update current QbMain;
cmDeleteRecord :
if (message(''#3'Удалить текущий раздел?', YesNo) = yes)
{
if (modifier GetFirst QbMainR = tsOk)
do
{
if (modifier GetFirst QbMainS = tsOk)
do
{
mystr := HandleBlanki(QbMainS.NameGlav,cmDeleteRecord,tipSys,myPlansNo);
}
while (modifier GetNext QbMainS = tsOk);
delete QbMainS;
}
while (modifier GetNext QbMainR = tsOk)
delete QbMainR;
delete current QbMain;
}
else abort;
end;
end;
HandleEvent
cmInit :
{ if (not GetUserTuneParam) { Abort; Exit; }
myCurRepNo := coGetTune('Konsolid.User.cCurRep');
if (myCurRepNo = 0) myCurRepNo := coGetTune('Konsolid.cCurRep');
if (modifier GetFirst CurRep where ((myCurRepNo == CurRep.NRec)) = tsOk)
myKodCurRep := CurRep.Kod
else
{
message(''#3'Не могу установить код' +
''#13#3'текущей консолидации баз данных!' +
''#13#3'Проведите настройку.',okButton);
Abort;
Exit;
}
DATAPath := GetDirectoryPat; // DirPat из OutPath.pas
DATAPath := SubStr(DATAPath,1,length(DATAPath) - 4); // убиваем 'PAT\'
OUTPath := AddSlash(GetStringParameter('Files','OutputFilesDirectory',0));
case TipSys of
0..10 : // балансы по филиалам
{ SetFormat(brDocBO);
SetWindowTitle(wnMainWindow,'Р А З Д Е Л Ы ( ' + Filial.Name + ' )');
}
11..19 : // просто бланки
{ myPlansNo := 0;
SetFormat(brDocB);
}
20..29 : // консолидированные отчеты
{ SetFormat(brDocBO);
SetWindowTitle(wnMainWindow,'Р А З Д Е Л Ы ( ' + CurRep.Name + ' )');
}
else
{ message(''#3'Некорректны входные параметры!',okButton);
Abort;
Exit;
}
end;
}
cmPlansNo : // перейти на другой план счетов
case TipSys of
0..10, 20..29 : GetMyPlansNo;
end;
cmBuhCalculator :
RunInterface('Buh_Calc');
cmHotKeys :
PutHotCommand(RunMenu('QbMainR_HotKeys'));
end;
end.
//-------------------------------------------------------------------------
QbMainR_HotKeys Menu
{
- 'Корректировка имени',cmZamena,'Корректировка имени раздела бланков или докуменнта',hcHotKeyQbName,'F2',kbF2,sci1Esc;
--------------;
- 'Бухгалтерский калькулятор',cmBuhCalculator,'Расчеты сумм оборотов, проводок и сальдо по счетам бухгалтерского учета ',hcBuh_Calculator,'Shift-F3',kbShiftF3,sci1Esc;
- 'Смена плана счетов',cmPlansNo,'Смена текущего плана счетов',hcKonsM1PlanSch,'Alt-P',kbAltP,sci1Esc;
}
QbMainD_HotKeys Menu
{
- 'Редактирование документа',cmDoRazdEdit,'Просмотр и редактирование документа по страницам',hcHotKeyQbEdit,'F4',kbF4,sci1Esc;
- 'Страницы документа ',cmDoRazdPage,'Просмотр и редактирование документа по страницам',hcHotKeyQbPage,'F3',kbF3,sci1Esc;
--------------;
- 'Корректировка имени',cmZamena,'Корректировка имени раздела бланков или докуменнта',hcHotKeyQbName,'F2',kbF2,sci1Esc;
--------------;
- 'Бухгалтерский калькулятор',cmBuhCalculator,'Расчеты сумм оборотов, проводок и сальдо по счетам бухгалтерского учета ',hcBuh_Calculator,'Shift-F3',kbShiftF3,sci1Esc;
}
QbMainP_HotKeys Menu
{
- 'Редактирование страницы',cmDoPageEdit,'Просмотр и редактирование документа по страницам',hcHotKeyQbEdit,'F4',kbF4,sci1Esc;
- 'Замена страницы документа ',cmDoPageFile,'Замена страницы документа',hcHotKeyQbZamena,'F3',kbF3,sci1Esc;
--------------;
- 'Бухгалтерский калькулятор',cmBuhCalculator,'Расчеты сумм оборотов, проводок и сальдо по счетам бухгалтерского учета ',hcBuh_Calculator,'Shift-F3',kbShiftF3,sci1Esc;
}
Re: Путь на пат-формы
Нужно уазать этот путь в настройке (startup.cfg):
Секция [Files]
PatPath=...
Путь к каталогу с PAT - отчетами
Секция [Files]
PatPath=...
Путь к каталогу с PAT - отчетами
Re: Путь на пат-формы
Этот путь я пыталась настроить, она чисто его не берет, а опять таки генерит: \\DC1\GALSRV\DATA1 и следом тот путь который я настроила в этом параметре.
Re: Путь на пат-формы
На 5.84 попробовал еще раз, все работает...
В QBMAIN хранятся пути на файл в виде
PAT\BAL-141.PAT
...
PAT2\BAL-141.PAT
Если задать PatPath=\\galaxy\gal584\mmm\
то пути получались:
\\galaxy\gal584\mmm\PAT\BAL-141.PAT
\\galaxy\gal584\mmm\PAT2\BAL-141.PAT
Если не задать PatPath вообще:
\\galaxy\gal584\PAT\BAL-141.PAT
\\galaxy\gal584\PAT2\BAL-141.PAT
Может версия Галактики другая?
В QBMAIN хранятся пути на файл в виде
PAT\BAL-141.PAT
...
PAT2\BAL-141.PAT
Если задать PatPath=\\galaxy\gal584\mmm\
то пути получались:
\\galaxy\gal584\mmm\PAT\BAL-141.PAT
\\galaxy\gal584\mmm\PAT2\BAL-141.PAT
Если не задать PatPath вообще:
\\galaxy\gal584\PAT\BAL-141.PAT
\\galaxy\gal584\PAT2\BAL-141.PAT
Может версия Галактики другая?
Re: Путь на пат-формы
версия та же 5.84.
проблема проявляется в базах скопированных, у которых название не DATA, а например DATANEW...
в обычной DATA - все без проблем.
Я скопировала все паты внутрь этих самых новых DATANEW - все работает ок, но хотелось бы не плодить одно и то же...
проблема проявляется в базах скопированных, у которых название не DATA, а например DATANEW...
в обычной DATA - все без проблем.
Я скопировала все паты внутрь этих самых новых DATANEW - все работает ок, но хотелось бы не плодить одно и то же...