2Katz: Начну с конца.
KATZ писал(а):...И разместить всё это уместнее в форуме "Программирование".
Оставлю на усмотрения модератора - посчитает нужным - перенесет, на мой взгляд эта задача соповождения, поскольку во главе угла пользовательсякая доработка, но это мое частное мнение.
По существу:
KATZ писал(а):...Рассказали бы хотя бы в двух словах, что и где должно поменяться после того, как код отработает...
Рискну привести здесь gkassa.vip
Код: Выделить всё
Const
sci134EnIns = 6922;
sci13EscTreeA = 8209;
End;
Interface gKassa 'Импорт распоряжений по главной распределительной кассе'(,,sci134EnIns);
Var
Handle : LongInt;
jDDoc : String;
jNazn, jPodr, jPodr1 : String;
NrecPlPor : Comp;
BadF, i : Word;
jSum : String;
CurF : String;
SS, count_n : longint;
mc4, mc41:string;
NrecPodr, cSeg, At4, At16, AtS :Comp;
MarB : Word;
FirstNum : String;
F16, F161 : String;
Table Struct jPrev "Таблица для превью"
(
cPodr : Comp,
Podr : String,
NumMc4 : String,
Summa : Double,
Mar : String,
NumF16 : String,
NumSum : String,
Prim : String
);
Table Struct jMar "Уникальные маршруты"
(
Mar : String,
Num : String
);
Create View jView
As
Select * From PlPor, SoprHoz, BaseFin, KauReff
, AttrVal, AttrNam, LastNumD, KatDoc, Pick, jPrev,JMAR
, ExClassVal, ExClassSeg, ExClassName, KatPodr KatPodr1
Where ((
NrecPlPor==PlPor.Nrec and
AttrVal.cAttrNam==AttrNam.Nrec and
jPrev.cPodr == KatPodr.Nrec and
Word(1413) == ExClassName.wTable and
'Маршруты' == ExclassName.Name and
Word(1413) == ExClassVal.wTable and
KatPodr.Nrec ==ExClassVal.cRec and
ExClassVal.cClassSeg==ExClassSeg.Nrec
))
Order by jPrev.Mar, jPrev.Podr;
Parameters NrecPlPor, count_n;
Panel jBrow;
Table jPrev;
Browse jBr
Show at (,,,20)
Fields
KatPodr.Name 'Подразделение ' : [25], Protect;
jPrev.Summa 'Сумма' : [18,2];//[18.2,'[|-]36`666`666`666.88'] ;
jPrev.NumMc4 '№ МС-4' : [10],Protect;
jPrev.Mar 'Маршрут' : [12],Protect, PickButton;
jPrev.NumF16 '№ Ф-16' : [10], Protect;
jPrev.NumSum '№ бр/сумки' : [10], NoProtect;
jPrev.Prim 'Примечание' : [35], NoProtect;
End;
Screen SRC (,,) show at (,21,,)
Buttons
cmOk, default;
cmNum;
<<
<. Ввод данных .> <. Перенумерация Ф-16 .>
>>
end;
End;
!End;
!HandleEvent
! cmInit:
! SS:='';
! cmOk: CloseDialogParam);
!End;
!End;
Procedure InsertSoprHoz;
Begin
! Message(NrecPlPor+' 1');
GetFirst PlPor;
ClearBuffer(#SoprHoz);
SoprHoz.NREC := GetNextNREC(#SoprHoz,0);
SoprHoz.cSoprDoc:= PlPor.Nrec;
SoprHoz.NoDoc := PlPor.NoDok;
SoprHoz.DatOb := PlPor.DatOb;
SoprHoz.TiDkGal := PlPor.TidkGal;
SoprHoz.TipDoc := PlPor.Tidk;
SoprHoz.Descr := PlPor.Descr;
SoprHoz.DesGr := PlPor.DesGr;
SoprHoz.Direct := Word(2);
SoprHoz.cFilKor := PlPor.cFilKor;
SoprHoz.VhSumHoz:= '+';
SoprHoz.ModeDoc := PlPor.ModeDoc;
SoprHoz.Summa := jPrev.Summa;
SoprHoz.cOrg := Plpor.cPlat;
SoprHoz.NameSho := jPrev.Prim;
insert current SoprHoz;
ClearBuffer(#AttrVal);
AttrVal.Nrec := GetNextNrec(#AttrVal,0);
AttrVal.wTable := Word(1120);
AttrVal.cRec := SoprHoz.Nrec;
AttrVal.cAttrNam := At4;
AttrVal.vString := jPrev.NumMc4;
Insert Current AttrVal;
ClearBuffer(#AttrVal);
AttrVal.Nrec := GetNextNrec(#AttrVal,0);
AttrVal.wTable := Word(1120);
AttrVal.cRec := SoprHoz.Nrec;
AttrVal.cAttrNam := At16;
AttrVal.vString := jPrev.NumF16;
Insert Current AttrVal;
ClearBuffer(#AttrVal);
AttrVal.Nrec := GetNextNrec(#AttrVal,0);
AttrVal.wTable := Word(1120);
AttrVal.cRec := SoprHoz.Nrec;
AttrVal.cAttrNam := AtS;
AttrVal.vString := jPrev.NumSum;
Insert Current AttrVal;
ClearBuffer(#BaseFin);
BaseFin.NREC := GetNextNREC(#BaseFin,0);
BaseFin.cSoprDoc:= PlPor.Nrec;
BaseFin.cPlPor := PlPor.Nrec;
BaseFin.NoDoc := PlPor.NoDok;
BaseFin.dDoc := PlPor.DatOb;
BaseFin.TiDkGal := PlPor.TidkGal;
BaseFin.TipDoc := PlPor.Tidk;
BaseFin.Descr := PlPor.Descr;
BaseFin.DesGr := PlPor.DesGr;
BaseFin.Direct := Word(2);
BaseFin.Summa := jPrev.Summa;
BaseFin.cOrg := Plpor.cPlat;
BaseFin.cSoprHoz:= SoprHoz.Nrec;
insert current BaseFin;
GetFirst PlPor;
PlPor.SumPlat:=PlPor.SumPlat+ jPrev.Summa;
Update current Plpor;
If jPrev.cPodr>Comp(0)
{
ClearBuffer(#KauReff);
KauReff.Nrec := GetNextNrec(#KauReff,0);
KauReff.CoTable := Word(1120);
KauReff.cRec := SoprHoz.Nrec;
KauReff.wKau := Word(2);
KauReff.cKau := jPrev.cPodr;
Insert Current KauReff;
}
End;
Procedure NumMar;
Begin
GetFirst LastNumD Where ((Word(2068)==LastNumd.LndType and Word(0)==LastNumD.LndSubT));
If LastNumD.LndNum<>FirstNum
{
LastNumD.LndNum:=FirstNum;
Update Current LastNumD;
}
If GetFirst jPrev =TsOk {};
Do
{
MarB := 0;
If GetFirst jMar=TsOk
Do
{
If jMar.Mar = jPrev.Mar Marb:=1;
}While GetNext jMar=TsOk;
If MarB=0
{
jMar.Mar:=jPrev.Mar;
GetFirst LastNumD Where ((Word(2068)==LastNumd.LndType and Word(0)==LastNumD.LndSubT));
jMar.Num := LastNumD.LndNum;
Insert Current jMar;
LastNumd.LndNum:=Word(LastNumd.LndNum)+1;
Update current LastNumD;
PushPos(#jPrev);
Update jPrev Where jPrev.Mar=jMar.Mar Set jPrev.NumF16:=jMar.Num;
PopPos(#jPrev);
}
}While GetNext jPrev=TsOk
ReScanPanel(#jPrev);
Delete All jMar;
End;
Procedure InsertjPrev;
Begin
ClearBuffer(#jPrev);
If SS=0
If GetFirst KatPodr Where((jPodr==KatPodr.Name))=TsOk {};
If SS=1 GetFirst KatPodr Where((Pick.cRec==KatPodr.Nrec));
jPrev.cPodr := KatPodr.nRec;
jPrev.Podr := KatPodr.Name;
jPrev.Summa :=Double(jSum);
If GetFirst ExClassSeg = TsOk
jPrev.Mar:= ExClassSeg.Name;
GetFirst LastNumD Where ((Word(2067)==LastNumd.LndType and Word(0)==LastNumD.LndSubT))
jPrev.NumMC4 :=LastNumd.LndNum;
jPrev.Prim :='' ;
Insert Current jPrev;
LastNumd.LndNum:=Word(LastNumd.LndNum)+1;
Update current LastNumD;
End;
Procedure ReadExcel;
Begin
CurF:='';
BadF:=0;
If GetFirst AttrVal Where ((Word(9015)==AttrVal.wTable and NrecPlPor==AttrVal.cRec))=TsOk
Do
{
GetFirst AttrNam;
If Instr('файл', AttrNam.Name)>0 Or Instr('Файл', AttrNam.Name)>0 CurF:=AttrVal.vString;
}While GetNext AttrVal Where ((Word(9015)==AttrVal.wTable and NrecPlPor==AttrVal.cRec)) =TsOk
If CurF<>''
{
If Instr('.XLS', CurF)>0 or Instr('.xls', CurF)>0
{
If Not xlIsExcelValid
If not xlCreateExcelWithTemplate(CurF, False)
{
Message('Ошибка открытия Excel-файла '+ CurF);
exit;
}
While Instr('\',CurF)>0 Do CurF:=substr(CurF,pos('\',CurF)+1,Length(CurF)-pos('\',CurF)+1);
If Instr('.',CurF)>0 CurF:=SubStr(CurF,1,Length(CurF)-Instr('.',CurF)+1);
xlSetActiveWorkBookByName(CurF);
xlSetActiveSheetByName(CurF);
StartNewVisual(vtRotateVisual, vfTimer+vfBreak,
''#3'Разбор файла...'+''#13#3,1);
i:=5
BadF:=0;
xlGetCellValue(i, 1,jPodr);
Do
{
If GetFirst KatPodr Where((jPodr==KatPodr.Name))<>TsOk
If Message('В справочнике подразделений отсутсвует подразделение '+ jPodr+ ' продолжить разбор файла?',YesNo)<>cmYes BadF:=1;
If BadF=0
{
i:=i+1;
xlGetCellValue(i, 1,jPodr);
}
}While Instr('ИТОГ', jPodr)=0 and BadF=0;
If BadF=0
{
i:=5
xlGetCellValue(i, 1,jPodr);
xlGetCellValue(i, 2,jSum);
If (InStr(',',jSum)<>0) jSum:=Replace(jSum,',','.');
Do
{
i:=i+1;
! GetFirst KatPodr Where((jPodr==KatPodr.Name));
If Double(jSum)>0 InsertjPrev;
xlGetCellValue(i, 1,jPodr);
xlGetCellValue(i, 2,jSum);
}While Instr('ИТОГ', jPodr)=0 ;
}
If xlIsExcelvalid xlKillExcel;
StopVisual('',0);
}
If Instr('.DBF', CurF)>0 or Instr('.dbf', CurF)>0
{
i:=5
Handle := DBFOpen(CurF,stOpenRead);
StartNewVisual(vtRotateVisual, vfTimer+vfBreak,
''#3'Разбор файла...'+''#13#3,1);
If dbfGetfirst(Handle)=tsOK
Do
{
jPodr1:=dbfGetFieldValue(Handle,'KOT');
If jPodr1<>'999'
{
jPodr:=''
GetFirst KatPodr1;
_Loop KatPodr1
{
If KatPodr1.TEl=jPodr1 jPodr:=KatPodr1.Name
}
If jPodr=''
If Message('В справочнике подразделений отсутсвует подразделение с кодом(Телефон)'+ jPodr1+ ' продолжить разбор файла?',YesNo)<>cmYes BadF:=1;
jSum:=dbfGetFieldValue(Handle,'SVY');
If Double(jSum)>0
{
InsertjPrev;
i:=i+1;
}
}
}While dbfGetNext(Handle)=tsOK and BadF=0;
dbfClose(Handle);
StopVisual('',0);
}
}
Else Message('Не задано имя файла, задайте имя файла во внешнем атрибуте!!!');
End;
Procedure RunMyInterface;
Begin
If GetFirst AttrNam Where ((Word(1120)==AttrNam.wTable and 'Ф-16'==AttrNam.Name))=TsOk
At16:=AttrNam.Nrec
Else Message('Отсутсвует внешний атрибут "Ф-16" к таблице SoprHoz');
If GetFirst AttrNam Where ((Word(1120)==AttrNam.wTable and 'МС-4'==AttrNam.Name))=TsOk
At4:=AttrNam.Nrec
Else Message('Отсутсвует внешний атрибут "МС-4" к таблице SoprHoz');
If GetFirst ExClassName<>TsOk
Message('Отсутсвует внешняя классификация "Маршруты" к каталогу подразделений');
If GetFirst AttrNam Where ((Word(1120)==AttrNam.wTable and 'номер сумки'==AttrNam.Name))=TsOk
AtS:=AttrNam.Nrec
Else Message('Отсутсвует внешний атрибут "номер сумки" к таблице SoprHoz');
mc4:='1';
If GetFirst LastNumD Where ((Word(2067)==LastNumd.LndType and Word(0)==LastNumD.LndSubT))=TsOk
mc4:=String(LastNumD.LndNum)
Else
{
ClearBuffer(#LastNumD);
LastNumD.Nrec := GetNextNrec(#LastNumD,0);
LastNumD.LndType := Word(2067);
LastNumD.LndSubT :=Word(0);
LastNumD.LndNum :='1';
Insert Current LastNumD;
ClearBuffer(#KatDoc);
KatDoc.Nrec := GetNextNrec(#KatDoc,0);
KatDoc.TidkGal := Word(2067);
KatDoc.TidkUsers :=Word(2067);
KatDoc.Name :='Письмо формы МС-4 (Почта)';
Insert Current KatDoc;
}
f16:='1';
If GetFirst LastNumD Where ((Word(2068)==LastNumd.LndType and Word(0)==LastNumD.LndSubT))=TsOk
f16:=String(LastNumD.LndNum)
Else
{
ClearBuffer(#LastNumD);
LastNumD.Nrec := GetNextNrec(#LastNumD,0);
LastNumD.LndType := Word(2068);
LastNumD.LndSubT :=Word(0);
LastNumD.LndNum :='1';
Insert Current LastNumD;
ClearBuffer(#KatDoc);
KatDoc.Nrec := GetNextNrec(#KatDoc,0);
KatDoc.TidkGal := Word(2068);
KatDoc.TidkUsers :=Word(2068);
KatDoc.Name :='Накладная Ф-16(Почта)';
Insert Current KatDoc;
}
f161:=f16;
If RunDialog(Param111,ss, mc4, f16)=cmCancel exit;
If mc41<>mc4
If GetFirst LastNumD Where ((Word(2067)==LastNumd.LndType and Word(0)==LastNumD.LndSubT))=TsOk
{
LastNumD.LndNum:=mc4;
Update current lastnumD;
}
If f161<>f16
If GetFirst LastNumD Where ((Word(2068)==LastNumd.LndType and Word(0)==LastNumD.LndSubT))=TsOk
{
LastNumD.LndNum:=f16;
Update current LastNumD;
}
FirstNum:=F16;
If SS=0 ReadExcel;
If SS=1
{
ClearFieldOption(#jPrev.Summa, ofProtected);
Delete all Pick;
If RunInterface(Z_KATPODR::GetAnyPodr,NrecPodr,15)<>cmCancel
{
i:=5;
If GetFirst Pick Where ((Word(11)==Pick.wList))=TsOk
Do
{
GetFirst KatPodr Where ((Pick.cRec==KatPodr.Nrec));
If KatPodr.IsLeaf=Word(1)
{
jSum:=0;
InsertjPrev;
i:=i+1;
}
}While GetNext Pick Where ((Word(11)==Pick.wList))=TsOk
Else Message('1 '+NrecPodr);
}
Delete all Pick;
}
NumMar;
End; //RunMyInterface
HandleEvent
cmInit:
{
mc4:='1';
If GetFirst LastNumD Where ((Word(2068)==LastNumd.LndType and Word(0)==LastNumD.LndSubT))=TsOk
mc4:=String(LastNumD.LndNum);
FirstNum:=Mc4;
SetFieldOption(#jPrev.Summa, ofProtected);
RunMyInterface;
}//Init
cmOK:
{
If GetFirst jPrev =TsOk
Do
{
PushPos(#jPrev);
If jPrev.Summa>Double(0) InsertSoprHoz;
PopPos(#jPrev);
}While GetNext jPrev=TsOk
Set count_n:=i-5;
Delete All SoprHoz Where ((Word(8)==SoprHoz.TipDoc and NrecPlPor==SoprHoz.cSoprDoc)) and SoprHoz.Summa=0;
CloseInterFace(-1);
}//cmok
cmNum:
{
NumMar;
}
cmCancel:
{
Set count_n:=0;
CloseInterFace(-1);
}
cmUpdateRecord: Update current jPrev;
cmPick:
{
Case CurField Of
#jPrev.Mar :
{
If GetFirst ExClassName=TsOk
If RunInterface (C_EXTCLASS::PickExClassifier,Word(1413),cSeg,1)<> cmCancel
{
GetFirst ExClassSeg Where ((cSeg==ExClassSeg.Nrec));
jPrev.Mar:=ExClassseg.Name;
UpDate Current jPrev;
Set jPrev.Mar:=jPrev.Mar;
}
}
End;
}
End;//HandleEvent
End.//Interface
Param111 dialog
!Screen qqq;
Fields
SS :word;
MC4 : String;
F16 : String;
Buttons
cmOk, Default;
cmCancel;
<<
Параметры:
(.) Импортировать из файла`
(.) Ввести вручную`
Нумерация МС-4 начинается с .@@@@@@@@@@@
Нумерация Ф-16 начинается с .@@@@@@@@@@@
<. ~В~вод .> <. ~О~тмена .>
>>
Этот код пока для меня черный ящик от и до.
На входе или как это должно работать : Если мы выбираем Приходный ордер
Код: Выделить всё
..........
.LinkForm 'ВВОД ХОЗОПЕРАЦИЙ ДЛЯ ГЛАВНОЙ РАСПРЕДЕЛИТЕЛЬНОЙ КАССЫ' Prototype is 'PlatDocs'
.group ’ПРИХОДНЫЙ КАССОВЫЙ ОРДЕР ЦБРФ - РТФ’
...........
то на входе используем xls файл в котором содерджатся сведения об излишках денег в отделении связи.
Uploaded with
ImageShack.us
имя файла вводим через внешние атрибуты у приходного ордера. Поэтому наверное и была притянута печать...
на выходе после обработки В Галке имеем на первом этапе список из полей: отделения связи, сумма, №мс45
на форме две кномпки ввод данных, а второй мы не пользовались.
по вводу данных куда-то импортируется количество хозопераций равное количеству отделений в списке.
дальше мы снова заходили в кассовый ордер выбирали тхо и формировалось количество проводок к документу равное количеству отделений в исходной xls-ке.
Буду премного благодарен если форумчане помогут мне понять логику этого кода, и помогут организовать нечто подобное для версии 8.10