Skip to content

Commit b34ee1d

Browse files
Version 10.1.9
1 parent 0d41fa2 commit b34ee1d

File tree

15 files changed

+310
-122
lines changed

15 files changed

+310
-122
lines changed

Src/Doc/VERSION.TXT

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15365,4 +15365,6 @@ Ver 1.2 Date 13/09/96
1536515365
!- {��� �������� ����} � ������ �������� �������� "������".
1536615366
!- {����� ��������} ��� ��������� ��� ��������� ��������� ����������.
1536715367
-FIX: {�������� ������ �����} ������ ��� ��������/������� ��������.
15368+
02/09/2018 v10.1.9
15369+
!- {����� ��������} � ��������� �������� ���������� ��������� ����������� ������������ ��� � ������������ �����.
1536815370

Src/Include/Pp.h

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5130,24 +5130,26 @@ struct AccTurnParam {
51305130
//
51315131
//
51325132
//
5133-
#define CCFLG2_QUOT2 0x00000001L // @v7.1.11 БД использует 2-е поколение котировок
5134-
#define CCFLG2_USESDONPURCHOP 0x00000002L // @v7.2.2 Проекция флага AGTF_USESDONPURCHOP в общем соглашении с поставщиками
5135-
#define CCFLG2_INDEXEADDR 0x00000004L // @v7.3.2 Индексировать телефоны из персоналий и адресов
5133+
#define CCFLG2_QUOT2 0x00000001L // БД использует 2-е поколение котировок
5134+
#define CCFLG2_USESDONPURCHOP 0x00000002L // Проекция флага AGTF_USESDONPURCHOP в общем соглашении с поставщиками
5135+
#define CCFLG2_INDEXEADDR 0x00000004L // Индексировать телефоны из персоналий и адресов
51365136
// Если этот флаг включен, то в таблицу EAddr записываются все телефоны из создаваемых и изменяемых
51375137
// персоналий и адресов для ускоренного извлечения объектов, связанных с телефоном.
5138-
#define CCFLG2_SYNCLOT 0x00000008L // @v7.6.1 Синхронизировать лоты
5139-
#define CCFLG2_ADJCPANCCLINETRANS 0x00000010L // @v7.9.6 При преобразовании строки чека из кассовой панели в запись
5138+
#define CCFLG2_SYNCLOT 0x00000008L // Синхронизировать лоты
5139+
#define CCFLG2_ADJCPANCCLINETRANS 0x00000010L // При преобразовании строки чека из кассовой панели в запись
51405140
// CCheckLine корректировать разницу за счет скидки. Функция CCheckItem::GetRec().
51415141
// Необходимость в установке пареметра может возникнуть при работе с товарами, которые продаются большими
51425142
// количествами и по ценам, имеющим более двух знаков после точки.
51435143
// Возможно, правило такой корректировки должно быть применено во всех случаях, однако, во
51445144
// избежании проблем с работающими инсталляциями, страхуемся вводом данного параметра.
5145-
#define CCFLG2_USECCHECKEXTPAYM 0x00000020L // @v8.0.0 Использовать расширение оплат по чекам
5146-
#define CCFLG2_DONTUSE3TIERGMTX 0x00000040L // @v8.1.9 Не использовать извлечение товарной матрицы с сервера при 3-tier режиме работы
5147-
#define CCFLG2_USEOMTPAYMAMT 0x00000080L // @v8.5.8 Использовать включенную сумму оплаты по документам
5145+
#define CCFLG2_USECCHECKEXTPAYM 0x00000020L // Использовать расширение оплат по чекам
5146+
#define CCFLG2_DONTUSE3TIERGMTX 0x00000040L // Не использовать извлечение товарной матрицы с сервера при 3-tier режиме работы
5147+
#define CCFLG2_USEOMTPAYMAMT 0x00000080L // Использовать включенную сумму оплаты по документам
51485148
#define CCFLG2_USESARTREDB 0x00000100L // @v9.7.11 Использовать базу данных Sartre (экпериментальная опция)
51495149
#define CCFLG2_USELOTXCODE 0x00000200L // @v9.8.11 Использовать дополнительные коды привязанные к строкам документов (ЕГАИС)
51505150
#define CCFLG2_USELCR2 0x00000400L // @v10.1.5 Использовать 2-ю версию индексации остатков по лотам
5151+
#define CCFLG2_USEVETIS 0x00000800L // @v10.1.9 @transient Использовать функционал ВЕТИС (Меркурий). Определяется динамически
5152+
// по установленным в конфигурации глобального обмена параметрам доступа к ВЕТИС.
51515153
//
51525154
// Общие параметры конфигурации
51535155
//
@@ -39482,6 +39484,8 @@ class PPViewCCheck : public PPView {
3948239484
int SLAPI GetReportId() const;
3948339485
int SLAPI Recover();
3948439486

39487+
static int DynFuncPosText; // @v10.1.9
39488+
3948539489
CCheckCore * P_CC;
3948639490
PPObjCSession CsObj;
3948739491
PPObjGoods GdsObj;
@@ -44547,7 +44551,12 @@ class VetisEntityCore {
4454744551
int SLAPI SearchPerson(PPID id, VetisPersonTbl::Rec * pRec);
4454844552
int SLAPI SearchDocument(PPID id, VetisDocumentTbl::Rec * pRec);
4454944553
int SLAPI MatchPersonInDocument(PPID docEntityID, int side /*0 - from, 1 - to*/, PPID personID, PPID dlvrLocID, int use_ta);
44550-
int SLAPI MatchDocument(PPID docEntityID, PPID billID, int rowN, int use_ta);
44554+
//
44555+
// Descr: Сопоставляет ветеринарный документ docEntityID с документом billID и (если !0) со строкой документа
44556+
// {billID; rowN}.
44557+
// Если параметр fromBill != 0, то считает, что лот {billID; rowN} уже сопоставлен и не модифицирует документ.
44558+
//
44559+
int SLAPI MatchDocument(PPID docEntityID, PPID billID, int rowN, int fromBill, int use_ta);
4455144560

4455244561
VetisEntityTbl ET;
4455344562
VetisProductTbl PiT;
@@ -44567,7 +44576,7 @@ class VetisDocumentFilt : public PPBaseFilt {
4456744576
SLAPI VetisDocumentFilt();
4456844577
int FASTCALL GetStatusList(PPIDArray & rList) const;
4456944578

44570-
uint8 ReserveStart[224]; // @anchor
44579+
uint8 ReserveStart[208]; // @anchor
4457144580
enum {
4457244581
fkGeneral = 0,
4457344582
fkInterchangeParam = 1
@@ -44580,6 +44589,8 @@ class VetisDocumentFilt : public PPBaseFilt {
4458044589
enum {
4458144590
fAsSelector = 0x0001
4458244591
};
44592+
S_GUID SelLotUuid; // Если установлен флаг fAsSelector, то после закрытия окна таблицы в этом поле будет выбранный идентификатор
44593+
// При открытии окна текущая позиция будет установлена на записи с этим идентификатором.
4458344594
long FromPersonID;
4458444595
long FromLocID;
4458544596
long ToPersonID;
@@ -44592,7 +44603,7 @@ class VetisDocumentFilt : public PPBaseFilt {
4459244603
DateRange Period;
4459344604
DateRange WayBillPeriod;
4459444605
long VDStatusFlags;
44595-
long Sel; // Если установлен флаг fAsSelector, то после закрытия окна таблицы в этом поле будет выбранный идентификатор
44606+
long Sel; // Если установлен флаг fAsSelector, то после закрытия окна таблицы в этом поле будет выбранный идентификатор
4459644607
uint8 ReserveEnd[28]; // @anchor
4459744608
};
4459844609

@@ -44624,6 +44635,8 @@ class PPViewVetisDocument : public PPView {
4462444635
int SLAPI InitIteration();
4462544636
int SLAPI NextIteration(VetisDocumentViewItem * pItem);
4462644637
int SLAPI CellStyleFunc_(const void * pData, long col, int paintAction, BrowserWindow::CellStyle * pCellStyle, PPViewBrowser * pBrw);
44638+
44639+
VetisEntityCore EC; // public поскольку внешние модули могут захотеть иметь доступ к этому (дорогому) ресурсу
4462744640
private:
4462844641
static int DynFuncEntityTextFld;
4462944642
static int DynFuncBMembTextFld;
@@ -44649,7 +44662,6 @@ class PPViewVetisDocument : public PPView {
4464944662
int SLAPI MatchObject(VetisDocumentTbl::Rec & rRec, int objToMatch);
4465044663

4465144664
VetisDocumentFilt Filt;
44652-
VetisEntityCore EC;
4465344665
PPID FromEntityID;
4465444666
PPID FromEnterpriseID;
4465544667
PPID ToEntityID;

Src/Include/Private/VERDATA.INC

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
//
22
// ..\INCLUDE\PRIVATE\VERDATA.INC
3-
// 2018-08-29T18:37:28
3+
// 2018-09-02T18:17:56
44
// Automaticaly generated file
55
// Don't modify!
66
//
77
0x24, 0x00, 0x00, 0x00, 0x33, 0x30, 0x79, 0x61, 0x52, 0x42, 0x44, 0x33, 0x44, 0x4f, 0x57, 0x45, 0x68, 0x31, 0x52, 0x66, 0x56, 0x32, 0x70, 0x74, 0x74, 0x7a, 0x51, 0x4a, 0x50, 0x59, 0x7a, 0x44,
8-
0x4a, 0x00, 0x27, 0x67, 0x00, 0x01, 0x00, 0x00, 0x21, 0xb3, 0x60, 0x0c, 0xca, 0x1c, 0x55, 0xdb, 0xbc, 0xd4, 0xcb, 0x05, 0x36, 0xd2, 0x8e, 0x04, 0xc3, 0xb0, 0x21, 0xb7, 0x7a, 0xf5, 0x23, 0x66,
9-
0x0c, 0x10, 0xe8, 0x3c, 0x9b, 0xf3, 0xf0, 0x91, 0x83, 0x0a, 0x7e, 0xfe, 0x59, 0x3c, 0xbc, 0x45, 0xe8, 0x87, 0x08, 0x75, 0xee, 0xea, 0xc2, 0xc0, 0x33, 0x04, 0x25, 0xb8, 0x5b, 0x5f, 0x7c, 0xf8,
10-
0x7d, 0xc0, 0xc4, 0xcf, 0x38, 0x7d, 0xc6, 0x5c, 0x2d, 0x7a, 0xb3, 0xd3, 0xa1, 0xad, 0xb9, 0x9e, 0x4e, 0xdd, 0x35, 0x6b, 0xcb, 0xda, 0x80, 0x50, 0x29, 0x22, 0x17, 0x87, 0x1b, 0xbc, 0xae, 0xb6,
11-
0xe6, 0x8e, 0x4d, 0xb2, 0xa0, 0x9f, 0xef, 0x14, 0x2a, 0x82, 0x34, 0xa5, 0xc4, 0xe3, 0x97, 0x31, 0xd4, 0xe2, 0xde, 0xb9, 0x1d, 0x6c, 0xe6, 0x99, 0x4f, 0x54, 0x28, 0x57, 0x04, 0x59, 0xba, 0x5f,
12-
0xd0, 0x01, 0xfc, 0x0c, 0x97, 0x49, 0x89, 0xef, 0x81, 0x50, 0x1a, 0xe9, 0x38, 0xd3, 0x1f, 0x70, 0x2c, 0x9f, 0x2d, 0x75, 0xb3, 0xe4, 0x65, 0x1b, 0x91, 0x77, 0xc5, 0x70, 0x61, 0x73, 0x16, 0x1c,
13-
0x0e, 0x26, 0x11, 0x52, 0xad, 0x69, 0xd8, 0xac, 0xb3, 0xda, 0x2e, 0xd2, 0x67, 0xa0, 0x14, 0x3e, 0xb6, 0xe7, 0x83, 0x60, 0x0e, 0xd0, 0x47, 0x11, 0x2a, 0x2c, 0xc2, 0x55, 0x43, 0xa0, 0x59, 0x8a,
14-
0xf4, 0x47, 0x3c, 0xef, 0xef, 0x8f, 0x19, 0x8f, 0x26, 0xc3, 0xad, 0xb7, 0x28, 0x98, 0xbe, 0x2f, 0x81, 0x98, 0x17, 0x08, 0xa9, 0x95, 0x83, 0xed, 0x8a, 0x14, 0x2b, 0x33, 0x53, 0xe5, 0x38, 0x7a
8+
0x4a, 0x00, 0xaf, 0x9d, 0x00, 0x01, 0x00, 0x00, 0x21, 0xb3, 0x60, 0x0c, 0xca, 0x1c, 0x55, 0xdb, 0xbc, 0xd4, 0xcb, 0x05, 0x37, 0xd2, 0x8e, 0x04, 0x28, 0xd4, 0x57, 0x28, 0x0b, 0x73, 0x34, 0xfa,
9+
0xf0, 0x98, 0xdc, 0xa5, 0x51, 0xde, 0xf3, 0xa4, 0x4a, 0xa8, 0xc0, 0x6f, 0x8e, 0x5d, 0xff, 0x60, 0xdc, 0x20, 0xe0, 0x5c, 0xfd, 0x10, 0x60, 0x0c, 0xce, 0xaf, 0x17, 0x51, 0x18, 0xba, 0x0b, 0xa5,
10+
0xf9, 0xa3, 0x00, 0x68, 0x0f, 0xc0, 0x54, 0xf6, 0x5a, 0x87, 0x37, 0x18, 0x39, 0x2c, 0x0f, 0x5a, 0xd0, 0x5c, 0x21, 0x08, 0x20, 0x88, 0x4f, 0x50, 0xb7, 0xd8, 0xc2, 0xb6, 0xc9, 0xcb, 0xe5, 0x79,
11+
0xd0, 0x2d, 0x6a, 0xb7, 0x41, 0x6d, 0x46, 0x97, 0x31, 0x3c, 0xc3, 0x63, 0xcf, 0xb7, 0x09, 0xd5, 0x92, 0xca, 0x13, 0x53, 0xc3, 0x67, 0x70, 0xac, 0x0c, 0x7c, 0x75, 0xb9, 0xa0, 0xda, 0x67, 0x6a,
12+
0x16, 0xbf, 0x5c, 0x5a, 0x7d, 0xe6, 0xe1, 0xb1, 0x79, 0xe3, 0xc7, 0x06, 0xad, 0x45, 0xac, 0xde, 0x5d, 0xfe, 0x8a, 0x30, 0x0c, 0x4f, 0xcb, 0xe2, 0x5c, 0x67, 0xad, 0xa0, 0x01, 0x65, 0x8d, 0x2f,
13+
0xa4, 0xe3, 0xc9, 0x73, 0xef, 0xd1, 0xd5, 0xb9, 0x89, 0xc3, 0xfb, 0x62, 0x25, 0x2a, 0x5c, 0xc7, 0xda, 0x33, 0xaa, 0xb3, 0x96, 0x54, 0x2c, 0x95, 0xd6, 0x89, 0xbf, 0x30, 0xd0, 0xba, 0x1f, 0xe2,
14+
0x87, 0x6c, 0xe0, 0x02, 0xf8, 0x0c, 0x5c, 0xd3, 0xa3, 0x42, 0x82, 0x07, 0x85, 0xe4, 0xc7, 0x9e, 0xd0, 0x6a, 0xb4, 0x67, 0x7f, 0x5a, 0x4a, 0x60, 0x24, 0xc6, 0x6b, 0xd7, 0xee, 0xd3, 0xc1, 0xad

Src/PPEquip/EquipDll/BnkSberbank.cpp

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -243,16 +243,11 @@ typedef int (__cdecl * TestPinpadProc)();
243243

244244
class PPDrvSberTrmnl : public PPBaseDriver {
245245
public:
246-
PPDrvSberTrmnl()
246+
PPDrvSberTrmnl() : LogNum(0), P_Lib(0), CardAuth(0), CloseDay(0), TestPinpad(0)
247247
{
248-
LogNum = 0;
249-
P_Lib = 0;
250-
CardAuth = 0;
251-
CloseDay = 0;
252-
TestPinpad = 0;
253-
//GlobalFree = 0;
254248
SString file_name;
255249
getExecPath(file_name);
250+
(SlipLogFileName = file_name).SetLastSlash().Cat("SberTrmnl_Slip.log"); // @v10.1.9
256251
DRVS.SetLogFileName(file_name.SetLastSlash().Cat("SberTrmnl.log"));
257252
}
258253
~PPDrvSberTrmnl()
@@ -270,11 +265,11 @@ class PPDrvSberTrmnl : public PPBaseDriver {
270265
private:
271266
long LogNum;
272267
SString SlipFileName;
268+
SString SlipLogFileName;
273269
SDynLibrary * P_Lib;
274270
CardAuthProc CardAuth;
275271
CloseDayProc CloseDay;
276272
TestPinpadProc TestPinpad;
277-
//GlobalFreeProc GlobalFree;
278273
};
279274

280275
static PPDrvSession::TextTableEntry _ErrMsgTab[] = {
@@ -485,7 +480,7 @@ PPDRV_INSTANCE_ERRTAB(SberTrmnl, 1, 0, PPDrvSberTrmnl, _ErrMsgTab);
485480
int PPDrvSberTrmnl::Init(const char * pLibPath)
486481
{
487482
int ok = 1;
488-
SlipFileName = 0;
483+
SlipFileName.Z();
489484
if(P_Lib) {
490485
CardAuth = 0;
491486
CloseDay = 0;
@@ -587,6 +582,14 @@ int PPDrvSberTrmnl::Pay(double amount, SString & rSlip)
587582
THROWERR((result = CardAuth(0, &auth_answr)) == SBRBNK_ERR_OK, SBRBNK_ERR_PAY); // Будем надеяться, что код ошибки и так вернет
588583
if(!isempty(auth_answr.P_Check)) {
589584
rSlip = auth_answr.P_Check;
585+
// @v10.1.9 {
586+
{
587+
SString temp_buf;
588+
temp_buf.Cat(getcurdatetime_(), DATF_DMY|DATF_CENTURY, TIMF_HMS);
589+
SLS.LogMessage(SlipLogFileName, temp_buf, 8192);
590+
SLS.LogMessage(SlipLogFileName, rSlip, 8192);
591+
}
592+
// } @v10.1.9
590593
::GlobalFree(auth_answr.P_Check);
591594
auth_answr.P_Check = 0;
592595
}
@@ -620,6 +623,14 @@ int PPDrvSberTrmnl::Refund(double amount, SString & rSlip)
620623
THROWERR((result = CardAuth(0, &auth_answr)) == SBRBNK_ERR_OK, SBRBNK_ERR_REFUND); // Будем надеяться, что код ошибки и так вернет
621624
if(!isempty(auth_answr.P_Check)) {
622625
rSlip = auth_answr.P_Check;
626+
// @v10.1.9 {
627+
{
628+
SString temp_buf;
629+
temp_buf.Cat(getcurdatetime_(), DATF_DMY|DATF_CENTURY, TIMF_HMS);
630+
SLS.LogMessage(SlipLogFileName, temp_buf, 8192);
631+
SLS.LogMessage(SlipLogFileName, rSlip, 8192);
632+
}
633+
// } @v10.1.9
623634
::GlobalFree(auth_answr.P_Check);
624635
auth_answr.P_Check = 0;
625636
}

Src/PPEquip/EquipDll/Pirit/Pirit.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ class PiritEquip {
232232
public:
233233
OpLogBlock(const char * pLogFileName, const char * pOp, const char * pExtMsg) : StartClk(clock()), Op(pOp), ExtMsg(pExtMsg)
234234
{
235-
LogFileName = 0/*pLogFileName*/; // @v9.7.1 pLogFileName-->0
235+
//LogFileName = 0/*pLogFileName*/; // @v9.7.1 pLogFileName-->0
236236
LogFileName = pLogFileName;
237237
if(LogFileName.NotEmpty() && Op.NotEmpty()) {
238238
SString line_buf;

Src/PPLib/Trfridlg.cpp

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -848,22 +848,44 @@ IMPL_HANDLE_EVENT(TrfrItemDialog)
848848
}
849849
break;
850850
case cmVetisMatch: // @v10.1.8
851-
if(checkdate(P_Pack->Rec.Dt)) {
851+
if(Item.Flags & PPTFR_RECEIPT && CConfig.Flags2 & CCFLG2_USEVETIS && checkdate(P_Pack->Rec.Dt)) {
852852
const PPID suppl_person_id = ObjectToPerson(P_Pack->Rec.Object, 0);
853853
if(suppl_person_id) {
854-
/* @construction
854+
SString temp_buf;
855855
VetisDocumentFilt vetis_filt;
856856
vetis_filt.VDStatusFlags = (1<<vetisdocstCONFIRMED) | (1<<vetisdocstUTILIZED);
857857
vetis_filt.Period.Set(plusdate(P_Pack->Rec.Dt, -3), P_Pack->Rec.Dt);
858858
vetis_filt.FromPersonID = suppl_person_id;
859859
vetis_filt.Flags |= (VetisDocumentFilt::fAsSelector);
860+
if(P_Pack->LTagL.GetNumber(PPTAG_LOT_VETIS_UUID, ItemNo, temp_buf) > 0) {
861+
vetis_filt.SelLotUuid.FromStr(temp_buf);
862+
}
860863
PPViewVetisDocument vetis_view;
861864
if(vetis_view.Init_(&vetis_filt)) {
865+
//temp_buf.Z().Cat(P_Pack->R)
866+
PPObjBill::MakeCodeString(&P_Pack->Rec, 0, temp_buf);
867+
SString item_info_buf;
868+
GetGoodsName(Item.GoodsID, item_info_buf);
869+
double phupu = 0.0;
870+
if(GObj.GetPhUPerU(Item.GoodsID, 0, &phupu) > 0 && phupu > 0.0) {
871+
item_info_buf.Space().Cat(fabs(Item.Quantity_) * phupu, MKSFMTD(0, 3, 0));
872+
}
873+
temp_buf.CatDiv('-', 1).Cat(item_info_buf);
874+
vetis_view.SetOuterTitle(temp_buf);
875+
//
862876
if(vetis_view.Browse(0) > 0) {
863-
PPID vetis_doc_id = ((VetisDocumentFilt *)vetis_view.GetBaseFilt())->Sel;
877+
VetisDocumentFilt * p_result_filt = (VetisDocumentFilt *)vetis_view.GetBaseFilt();
878+
PPID vetis_doc_id = p_result_filt->Sel;
879+
if(!!p_result_filt->SelLotUuid && vetis_doc_id) {
880+
p_result_filt->SelLotUuid.ToStr(S_GUID::fmtIDL, temp_buf);
881+
P_Pack->LTagL.AddNumber(PPTAG_LOT_VETIS_UUID, ItemNo, temp_buf);
882+
if(P_Pack->Rec.ID && Item.RByBill > 0 && Item.LotID) {
883+
if(!vetis_view.EC.MatchDocument(vetis_doc_id, P_Pack->Rec.ID, Item.RByBill, 1/*fromBill*/, 1))
884+
PPError();
885+
}
886+
}
864887
}
865888
}
866-
*/
867889
}
868890
}
869891
break;

0 commit comments

Comments
 (0)