diff --git a/Src/Include/PPDBS.H b/Src/Include/PPDBS.H index 55ac56ef85..79568603f0 100644 --- a/Src/Include/PPDBS.H +++ b/Src/Include/PPDBS.H @@ -8137,6 +8137,7 @@ public: int32 TabID; char Name[128]; uint32 PhoneP; + uint32 EMailP; uint32 AddressP; uint32 RAddressP; uint32 BnkNameP; @@ -8144,6 +8145,7 @@ public: uint32 RegSerialP; uint32 FiasAddrGuidP; uint32 FiasHouseGuidP; + uint32 AddrTypeP; char RegNumber[64]; int32 CityID; LDATE RegInitDate; @@ -8161,6 +8163,7 @@ public: DBField TabID; DBField Name; DBField PhoneP; + DBField EMailP; DBField AddressP; DBField RAddressP; DBField BnkNameP; @@ -8168,6 +8171,7 @@ public: DBField RegSerialP; DBField FiasAddrGuidP; DBField FiasHouseGuidP; + DBField AddrTypeP; DBField RegNumber; DBField CityID; DBField RegInitDate; diff --git a/Src/Include/Pp.h b/Src/Include/Pp.h index a7030b7ad6..937cf4fb4f 100644 --- a/Src/Include/Pp.h +++ b/Src/Include/Pp.h @@ -16797,8 +16797,8 @@ class PPNamedFilt { SString Symb; // Уникальная (непустая) строка символа именованного фильтра SString ViewSymb; // Строка символа объекта PPView, по которому строится фильтр SBuffer Param; // Хранит данные о настройках фильтра PPBaseFilt - ViewDefinition VD; // @v10.5.0 - ObjIdListFilt DestGuaList; // @v10.5.3 Список идентификаторов глобальных учетных записей, которым следует отправлять отчеты + ViewDefinition VD; // + ObjIdListFilt DestGuaList; // Список идентификаторов глобальных учетных записей, которым следует отправлять отчеты }; // // Descr: Пул именованных фильтров. Хранит фильтры, конкретизированные относительно базы данных @@ -17789,7 +17789,7 @@ class TsStakeEnvironment : public SStrGroup { double VolumeReal; // Объем для текущей цены Last c повышенной точностью double MarginReq; // Требуемая величина маржи на минимальный объем сделки (исходя из цены Last) }; - struct TerminalInfo { // @flag @v10.5.4 + struct TerminalInfo { // @flat TerminalInfo(); int32 GmtOffset; // TimeGMT - TimeLocal Разница между временем GMT и локальным на терминале. uint8 Reserve[64]; @@ -18336,42 +18336,42 @@ class PPObjTimeSeries : public PPObjReference { clsmodAdjustLoss = 1 // }; uint32 ID; - uint16 InputFrameSize; // Количество периодов с отсчетом назад, на основании которых принимается прогноз // @v10.8.10 uint32-->uint16 - uint16 MainFrameSize; // Длина периода магистрального тренда // @v10.8.10 uint32-->uint16 + uint16 InputFrameSize; // Количество периодов с отсчетом назад, на основании которых принимается прогноз + uint16 MainFrameSize; // Длина периода магистрального тренда int16 Prec; // Точность представления значений (количество знаков после десятичной точки) uint16 TargetQuant; // Максимальный рост в квантах SpikeQuant uint16 MaxDuckQuant; // Максимальная величина "проседания" в квантах SpikeQuant uint16 OptDelta2Stride; // Оптимальный шаг назад при расчете изменения тренда int16 StakeMode; // Режим покупки: 0 - сплошной (случайный); 1 - по значению тренда; 2 - по изменению тренда, 3 - по значению и изменению тренда uint16 StakeCloseMode; // clsmodXXX Режим закрытия - uint16 BaseFlags; // @flags // @v10.8.10 uint32-->uint16 + uint16 BaseFlags; // @flags uint16 PeakAvgQuant; uint16 BottomAvgQuant; uint16 PeakMaxQuant; - uint16 GenSeq; // @v10.7.9 Порядок генерации при поиске оптимального фактора регрессия/выигрыш - uint16 GenPtCount; // @v10.7.11 Общее количество точек, по которым рассчитывалась стратегия // @v10.8.10 uint32-->uint16 + uint16 GenSeq; // Порядок генерации при поиске оптимального фактора регрессия/выигрыш + uint16 GenPtCount; // Общее количество точек, по которым рассчитывалась стратегия // uint32 StakeCount; // Количество ставок при тестировании uint32 WinCount; // Количество выигрышей в результате тестирования uint32 StakeCountAtFinalSimulation; // double Margin; // Маржа double SpikeQuant_s; // Минимальный квант относительного изменения котировки для дискретизации параметров double SpreadAvg; // Среднее значение спреда между Ask и Bid - double TrendErrAvg; // @v10.3.12 Среднее значение ошибки регрессии по всему множеству расчетных точек - float TrendErrLim; // @v10.3.12 Ограничение для ошибки регрессии, выше которого применять стратегию нельзя. + double TrendErrAvg; // Среднее значение ошибки регрессии по всему множеству расчетных точек + float TrendErrLim; // Ограничение для ошибки регрессии, выше которого применять стратегию нельзя. // Эта величина умножается на TrendErrAvg для получения абсолютного значения лимита. // [0..]. 0 - не использовать ограничение, 1.0 - ограничение равно TrendErrAvg, 1.05 - (1.05 * TrendErrAvg) // @v10.8.10 double-->float - float TrendErrLowLim; // @v10.8.10 @experimental Если >0.0 то это - нижняя граница ошибки регрессии (очень спорно) - double MainTrendErrAvg; // @v10.6.12 Среднее значение ошибки регрессии для магистрального тренда + float TrendErrLowLim; // @experimental Если >0.0 то это - нижняя граница ошибки регрессии (очень спорно) + double MainTrendErrAvg; // Среднее значение ошибки регрессии для магистрального тренда float MainTrendErrLim; // Ограничение для ошибки регрессии магистрального тренда // @v10.8.10 double-->float - float ADF; // @v10.8.9 @experimental Adjusent-Density-Factor фактор плотности смежных зон - float UEF; // @v10.8.10 Unevenness-Factor фактор неравномерности распределения точек в зоне OpeDeltaRange - float GenTEA; // @v10.8.10 Trend-Err-Average at generating phase - float GenTED; // @v10.8.10 Trend-Err-Deviation at generating phase - float CADF; // @v10.8.12 Core-Angular-Deviation-Factor фактор отклонения протестированных результатов стратегии от центральной линии канала - float MRSF; // @v10.8.12 Most-Recently-Stake-Factor фактор близости к текущему моменту последних расчетных ставок + float ADF; // @experimental Adjusent-Density-Factor фактор плотности смежных зон + float UEF; // Unevenness-Factor фактор неравномерности распределения точек в зоне OpeDeltaRange + float GenTEA; // Trend-Err-Average at generating phase + float GenTED; // Trend-Err-Deviation at generating phase + float CADF; // Core-Angular-Deviation-Factor фактор отклонения протестированных результатов стратегии от центральной линии канала + float MRSF; // Most-Recently-Stake-Factor фактор близости к текущему моменту последних расчетных ставок uint16 ATWC; // @v11.1.11 Количество выигрышных срабатываний при тестировании после расчетного периода - uint8 Reserve[14]; // @v10.8.10 // @v10.8.12 [24]-->[20] // @v11.1.11 [16]-->[14] + uint8 Reserve[14]; // @v11.1.11 [16]-->[14] OptimalFactorRange OptDeltaRange; OptimalFactorRange OptDelta2Range; // Если MainFrameSize > 0 то здесь хранится диапазон магистрального тренда для стратегии StrategyResultValue V; // Результат тестирования @@ -18409,25 +18409,23 @@ class PPObjTimeSeries : public PPObjReference { double SumBottom; // double MaxPeak; // uint64 TotalSec; // Общее время теста (для симуляции контейнеров стратегий) - uint FactorRangeLo; // @v10.8.6 - uint FactorRangeUp; // @v10.8.6 + uint FactorRangeLo; // + uint FactorRangeUp; // }; struct BestStrategyBlock { BestStrategyBlock(); BestStrategyBlock & Z(); void SetResult(double localResult, uint strategyIdx, double tv, double tv2); - double MaxResult; // - int MaxResultIdx; // - double TvForMaxResult; // - double Tv2ForMaxResult; // - double TrendErr; // @v10.4.11 - double TrendErrRel; // @v10.4.11 - double MainTrendErr; // @v10.6.12 - double MainTrendErrRel; // @v10.6.12 - // @v10.8.9 double LocalDeviation; // @v10.7.1 - // @v10.8.9 double LocalDeviation2; // @v10.7.1 - uint8 Reserve[16]; // @v10.8.9 + double MaxResult; + int MaxResultIdx; + double TvForMaxResult; + double Tv2ForMaxResult; + double TrendErr; + double TrendErrRel; + double MainTrendErr; + double MainTrendErrRel; + uint8 Reserve[16]; }; class StrategyContainer : public TSVector { @@ -18460,10 +18458,10 @@ class PPObjTimeSeries : public PPObjReference { scoreSeStakeCountMean, // Среднее по количеству ставок на этапе отбора стратегий scoreSeStakeCountStdDev, // Стандартное отклонение по количеству ставок на этапе отбора стратегий scoreSeStakeCountVarCoeff, // Коэффициент вариации по количеству ставок на этапе отбора стратегий - scoreEvAngularStakeDensity, // @v10.8.8 Угловая плотность ставок на этапе вычисления стратегий - scoreSeAngularStakeDensity, // @v10.8.8 Угловая плотность ставок на этапе отбора стратегий - scoreEvAngularWinRate, // @v10.8.8 Угловой коэффициент выигрышей - scoreTotalAngle // @v10.8.8 Суммарная величина угла по всем стратегиям контейнера + scoreEvAngularStakeDensity, // Угловая плотность ставок на этапе вычисления стратегий + scoreSeAngularStakeDensity, // Угловая плотность ставок на этапе отбора стратегий + scoreEvAngularWinRate, // Угловой коэффициент выигрышей + scoreTotalAngle // Суммарная величина угла по всем стратегиям контейнера }; // // Descr: Рассчитывает значение показателя контейнера стратегий. @@ -18491,14 +18489,14 @@ class PPObjTimeSeries : public PPObjReference { gbsfStakeMode1 = 0x0004, gbsfCritProfitMultProb = 0x0040, // В качестве критерия сортировки применять произведение доходности на отношение win/stake. // Если флаг не установлен, то - доходность. - gbsfCritProb = 0x0080, // @v10.4.2 В качестве критерия сортировки применять отношение win/stake. - gbsfEliminateDups = 0x0100, // @v10.4.1 Не включать в список дубликаты по StakeMode1 с идентичными + gbsfCritProb = 0x0080, // В качестве критерия сортировки применять отношение win/stake. + gbsfEliminateDups = 0x0100, // Не включать в список дубликаты по StakeMode1 с идентичными // диапазонами и InputFrameSize (игнорируется то из двух, кто имеет наименьший целевой критерий) - gbsfTrendFollowing = 0x0200, // @v10.4.3 Отбирать только стратегии, идущие вдоль тренда - gbsfCritTotalResult = 0x0400, // @v10.7.3 В качестве критерия сортировки применять абсолютный доход по стратегии. - gbsfOptDeltaRangeCQA = 0x0800, // @V10.7.4 Специальный критерий сортировки по среднему катету угла регрессии в квантах (с дифференциацией по сегментам магистрального тренда) - gbsfShuffle = 0x2000, // @v10.7.7 Перед селекцией хаотизировать список стратегий - gbsfCritStakeCount = 0x8000 // @v10.7.9 В качестве критерия сортировки применять количество ставок стратегии. + gbsfTrendFollowing = 0x0200, // Отбирать только стратегии, идущие вдоль тренда + gbsfCritTotalResult = 0x0400, // В качестве критерия сортировки применять абсолютный доход по стратегии. + gbsfOptDeltaRangeCQA = 0x0800, // Специальный критерий сортировки по среднему катету угла регрессии в квантах (с дифференциацией по сегментам магистрального тренда) + gbsfShuffle = 0x2000, // Перед селекцией хаотизировать список стратегий + gbsfCritStakeCount = 0x8000 // В качестве критерия сортировки применять количество ставок стратегии. }; int MakeOrderIndex(long flags, TSArray & rIndex) const; int GetBestSubset2(const PPTssModelPacket & rTssPacket, StrategyContainer & rScDest, StrategyContainer * pScSkipDueDup, LongArray * pToRemovePosList) const; @@ -18521,14 +18519,14 @@ class PPObjTimeSeries : public PPObjReference { enum { selcritVelocity = 1, // По скорости выигрыша selcritWinRatio = 2, // По отношению числа выигрышей к ставкам - selcritResult = 3, // @v10.7.3 По абсолютной величине выигрыша - selcritStakeCount = 4, // @v10.8.9 По количеству ставок стратегии + selcritResult = 3, // По абсолютной величине выигрыша + selcritStakeCount = 4, // По количеству ставок стратегии selcritfSkipAmbiguous = 0x0100, // Флаг, блокирующий выбор стратегии, если существует хотя бы одна иная стратегия с противоположным направлением selcritfSkipShort = 0x0200, // Флаг, блокирующий выбор коротких стратегий selcritfSkipLong = 0x0400, // Флаг, блокирующий выбор длинных стратегий - selcritfWeightAmbiguous = 0x0800, // @v10.4.12 Флаг, предписывающий при наличии разнонаправленных стратегий выбирать то направление, + selcritfWeightAmbiguous = 0x0800, // Флаг, предписывающий при наличии разнонаправленных стратегий выбирать то направление, // которому соответствует большее количество допустимых стратегий. Если количества равны, то не выбирать ничего - selcritfSingle = 0x1000 // @v10.7.7 В коллекции намеренно представлена единственная стратегия: не применять критерий MinSimilItems + selcritfSingle = 0x1000 // В коллекции намеренно представлена единственная стратегия: не применять критерий MinSimilItems }; struct SelectBlock : public BestStrategyBlock { SelectBlock(const TSCollection & rTrendList, const Index1 & rIndex, uint bucketQuantMin); @@ -18587,15 +18585,15 @@ class PPObjTimeSeries : public PPObjReference { float low; float upp; }; - struct FlatBlock { // @v10.6.12 @flat @persistent + struct FlatBlock { // @flat @persistent FlatBlock(); double MainTrendErrAvg; // Среднее значение ошибки регрессии для магистрального тренда - double AvgLocalDeviation; // @v10.7.1 Среднее локальное отклонение по всей выборке - LDATE UseDataForStrategiesTill; // @v10.7.3 - uint8 Reserve2[10]; // @v10.8.9 + double AvgLocalDeviation; // Среднее локальное отклонение по всей выборке + LDATE UseDataForStrategiesTill; + uint8 Reserve2[10]; double ExperimentalFactor; // @20200819 Экспериментальный фактор, рассчитываемый по ситуации (с целью нахождения устойчивых контейнеров) - CriterionRange Cr[2]; // @v10.8.9 - uint8 Reserve[6]; // @v10.7.1 [56]-->[48] // @v10.7.3 [48]-->[44] // @v10.7.7 [44]-->[42] // @v10.8.6 [42]-->[34] // @20200819 [34]-->[26] // @v10.8.9 [26]-->[6] + CriterionRange Cr[2]; // + uint8 Reserve[6]; // } Fb; }; static int EditConfig(const PPObjTimeSeries::Config * pCfg); @@ -18677,21 +18675,21 @@ class PPViewTimeSeries : public PPView { explicit BrwItem(const PPTimeSeriesPacket * pTs); PPID ID; // @id char Name[48]; // @name @!refname - char Symb[20]; // + char Symb[20]; double BuyMarg; double SellMarg; - double ManualMarg; // @v10.5.6 - int16 Type; // @v10.5.6 + double ManualMarg; + int16 Type; int16 Prec; char CurrencySymb[12]; double SpikeQuant_t; // double AvgSpread; // uint32 OptMaxDuck; // Оптимальная глубина проседания (в квантах) при длинной ставке uint32 OptMaxDuck_S; // Оптимальная глубина проседания (в квантах) при короткой ставке - uint16 PeakAvgQuant; // @v10.3.3 - uint16 PeakAvgQuant_S; // @v10.3.3 - uint16 TargetQuant; // @v10.4.2 - long Flags; // + uint16 PeakAvgQuant; + uint16 PeakAvgQuant_S; + uint16 TargetQuant; + long Flags; long CfgFlags; }; PPViewTimeSeries(); @@ -18816,15 +18814,15 @@ class PrcssrTsStrategyAnalyzeFilt : public PPBaseFilt { // @persistent fProcessLong = 0x0008, fProcessShort = 0x0010, fAutodetectTargets = 0x0020, // Автоматически идентифицировать серии, модели по которым следует пересчитать - fSimulateAfter = 0x0040, // @v10.7.0 Провести имитационный тест после построения моделей - fAnalyzeModels = 0x0080, // @v10.7.7 Анализ возможных параметров моделей + fSimulateAfter = 0x0040, // Провести имитационный тест после построения моделей + fAnalyzeModels = 0x0080, // Анализ возможных параметров моделей }; uint8 ReserveStart[32]; // @anchor long Flags; // @flags long CloseMode; // PPObjTimeSeries::Strategy::clsmodXXX - LDATE UseDataForStrategiesTill; // @v10.7.2 - LDATE UseDataForStrategiesTill2; // @v10.8.9 - uint8 ReserveEnd[52]; // @reserve // @v10.7.2 [60]-->[56] // @v10.8.9 [56]-->[52] + LDATE UseDataForStrategiesTill; + LDATE UseDataForStrategiesTill2; + uint8 ReserveEnd[52]; // @reserve ObjIdListFilt TsList; // @anchor }; @@ -18846,37 +18844,35 @@ class PrcssrTsStrategyAnalyze { tcAmount = 0, // Абсолютный объем выигрыша tcVelocity = 1, // Скорость выигрыша tcWinRatio = 2, // Вероятность выигрыша (количество выигрышей деленных на количество точек в секторе) - tcAngularRatio = 3 // @v10.7.9 Угловая вероятность выигрыша (количество выигрышей деленных на радианный угол сектора) + tcAngularRatio = 3 // Угловая вероятность выигрыша (количество выигрышей деленных на радианный угол сектора) }; long Flags; - long OptTargetCriterion; // @v10.4.6 + long OptTargetCriterion; LongArray InputFrameSizeList; // Список не включает период магистрального тренда - LongArray MaxDuckQuantList_Obsolete; // @v10.8.4 Не используется (оставлен из-за персистентности) - LongArray TargetQuantList_Obsolete; // @v10.4.3 // @v10.8.4 Не используется (оставлен из-за персистентности) - LAssocArray StakeBoundList; // @v10.7.3 Пары {TP, SL} работающие вместо списков MaxDuckQuantList, TargetQuantList. + LongArray MaxDuckQuantList_Obsolete; // Не используется (оставлен из-за персистентности) + LongArray TargetQuantList_Obsolete; // Не используется (оставлен из-за персистентности) + LAssocArray StakeBoundList; // Пары {TP, SL} работающие вместо списков MaxDuckQuantList, TargetQuantList. // То есть, если StakeBoundList не пустой, то MaxDuckQuantList, TargetQuantList не используются - LongArray MainFrameSizeList; // @v10.5.0 + LongArray MainFrameSizeList; double InitTrendErrLimit; - double PartitialTrendErrLimit; // @v10.7.4 Ограничение ошибки тренда по максимальной части общей выборки ошибок тренда. + double PartitialTrendErrLimit; // Ограничение ошибки тренда по максимальной части общей выборки ошибок тренда. // Так значение 0.90 означает, что для стратегии будет применена максимальная ошибка не превышающая величину которой // соответствует 90 процентов значений тренда, отсортированных по значению ошибки. - double InitMainTrendErrLimit; // @v10.7.0 + double InitMainTrendErrLimit; uint BestSubsetDimention; uint BestSubsetMaxPhonyIters; uint BestSubsetOptChunk; // 0 || 1 || 3 || 7 || 15 - uint OptRangeStep; // @v10.4.7 - uint OptRangeStepMkPart; // @v10.4.7 - uint OptRangeMultiLimit; // @v10.4.7 - uint OptRangeMaxExtProbe; // @v10.7.3 @default=1 Максимальное количество попыток расширения оптимального интервала значений регрессии + uint OptRangeStep; + uint OptRangeStepMkPart; + uint OptRangeMultiLimit; + uint OptRangeMaxExtProbe; // @default=1 Максимальное количество попыток расширения оптимального интервала значений регрессии LDATE UseDataSince; // Модель строить по данным, начиная с указанной даты включительно (если checkdate(UseDataSince)) - LDATE UseDataTill; // @v10.7.0 Модель строить по данным для указанной даты включительно (если checkdate(UseDataTill)) - // @v10.8.9 uint DefTargetQuant; // @v10.4.2 - uint8 Reserve2[4]; // @v10.8.9 - uint MainFrameRangeCount; // @v10.4.9 Количество сегментов, на которые разбивается все множество значений магистрального тренда для подбора стратегий - double MinWinRate; // @v10.4.2 Минимальное отношение выигрышей для стратегий, попадающих в финальную выборку - double OverallWinRateLimit; // @v10.7.0 Минимальное отношение выигрышей для всего множества отобранных стратегий - // @v10.7.10 long ChaosFactor; // @v10.7.1 Фактор случайности при выборе стратегии в промилле. - long Reserve; // @v10.7.10 + LDATE UseDataTill; // Модель строить по данным для указанной даты включительно (если checkdate(UseDataTill)) + uint8 Reserve2[4]; + uint MainFrameRangeCount; // Количество сегментов, на которые разбивается все множество значений магистрального тренда для подбора стратегий + double MinWinRate; // Минимальное отношение выигрышей для стратегий, попадающих в финальную выборку + double OverallWinRateLimit; // Минимальное отношение выигрышей для всего множества отобранных стратегий + long Reserve; }; static int ReadModelParam(ModelParam & rMp); PrcssrTsStrategyAnalyze(); @@ -18913,7 +18909,6 @@ class PrcssrTsStrategyAnalyze { uint MainFrameSize; RealRange R; }; - // @v10.7.2 int GetTimeSeries(PPID tsID, ModelParam & rMp, STimeSeries & rTs); int GetTimeSeries(PPID tsID, LDATE dateSince, LDATE dateTill, STimeSeries & rTs); int FindStrategies(void * pBlk) const; int SimulateStrategyResultEntries(void * pBlk, const TSVector & rList, @@ -19491,8 +19486,8 @@ class PPObjAssetWrOffGrp : public PPObjReference { #define OPSUBT_DEBTINVENT 7 // Инвентаризация задолженности #define OPSUBT_TRADEPLAN 8 // План торговли (драфт-операции) #define OPSUBT_ACCWROFF 9 // PPOPT_ACCTURN Списание по бухгалтерским счетам -#define OPSUBT_POSCORRECTION 10 // @v10.0.0 Корректировка фискальных сумм по кассовому аппарату -#define OPSUBT_RETURNREQ 11 // @v10.8.12 PPOPT_DRAFTRECEIPT Запрос от покупателя на возврат ранее купленного товара. +#define OPSUBT_POSCORRECTION 10 // Корректировка фискальных сумм по кассовому аппарату +#define OPSUBT_RETURNREQ 11 // PPOPT_DRAFTRECEIPT Запрос от покупателя на возврат ранее купленного товара. // Variant of [EDI 180 Return Merchandise Authorization and Notification] // // Descr: Заголовочная запись вида операций @@ -20054,6 +20049,9 @@ class PPObjSecur : public PPObjReference { #define PPBZSI_SALECOST 35 // @v12.1.9 "salecost" Себестоимость проданных товаров #define PPBZSI_FREIGHT 36 // @v12.1.9 "freight" Стоимость фрахта #define PPBZSI_ORDCANCELLATIONRATE 37 // @v12.1.11 [compound] "ordcancellationrate" Отношение числа отмененных заказов к общему числу заказов +#define PPBZSI_SALERETCOUNT 38 // @v12.1.11 "saleretcount" Количество документов возврата от покупателей // +#define PPBZSI_SALERETQTTY 39 // @v12.1.11 "saleretqtty" Возвращенное от покупателей количество торговых единиц +#define PPBZSI_SALERETCOST 40 // @v12.1.11 "saleretcost" Себестоимость возвращенных от покупателей товаров // // Флаги значений бизнес-показателей // @@ -20336,7 +20334,7 @@ class GlobalBizScoreCore : public GlobalBizScoreTbl { struct PPGlobalUserAccConfig { enum { fValid = 0x0001, // @transient Структура извлечена из базы данных - fAutoCreateGUID = 0x0002 // @v10.6.6 Автоматически создавать тег собственного GUID'а для новых записей + fAutoCreateGUID = 0x0002 // Автоматически создавать тег собственного GUID'а для новых записей }; PPID Tag; // Const=PPOBJ_CONFIG PPID ID; // Const=PPCFG_MAIN @@ -20675,10 +20673,10 @@ class GtinStruc : public StrAssocArray { int DetectPrefix(const char * pSrc, uint flags, int currentId, uint * pPrefixLen) const; int GetPrefixSpec(int prefixId, uint * pFixedLen, uint * pMinLen) const; ::LAssocArray SpecialFixedTokens; // Значение длины 1000 означает 'до конца строки' (UNTIL EOL) - ::LAssocArray SpecialMinLenTokens; // @v10.9.6 Специфицированные минимальные длины токенов + ::LAssocArray SpecialMinLenTokens; // Специфицированные минимальные длины токенов LongArray OnlyTokenList; int SpecialNaturalToken; // При разборе может появиться специальный случай, отражаемый как NaturalToken (например, SNTOK_CHZN_CIGITEM) - uint8 SpecialStopChars[12]; // @v10.9.9 Специальные символы-разделители токенов. Все символы в этом буфере, предшествующие 0 считаются разделителями. + uint8 SpecialStopChars[12]; // Специальные символы-разделители токенов. Все символы в этом буфере, предшествующие 0 считаются разделителями. }; // // @@ -20712,7 +20710,7 @@ class PPEdiProviderPacket { extssAddr2 = 12, extssLogin = 13, extssPassword = 14, - extssFormatSymb = 15, // @v10.0.02 Символ формата обмена (зависит от провайдера) + extssFormatSymb = 15, // Символ формата обмена (зависит от провайдера) extssSubIn = 16, // @v11.9.4 Подкаталог (или иное дополнение к адресу), указывающий на входящие документы extssSubOut = 17, // @v11.9.4 Подкаталог (или иное дополнение к адресу), указывающий на исходящие документы }; @@ -21495,7 +21493,7 @@ class PPCashMachine { double AmtBank; // @#{>=0} Сумма электронного платежа double AmtPrepay; // @#{>=0} Сумма предоплатой double AmtPostpay; // @#{>=0} Сумма постоплатой - double AmtVat20; // @v10.4.8 Сумма налога по ставке 20% + double AmtVat20; // Сумма налога по ставке 20% double AmtVat18; // Сумма налога по ставке 18% double AmtVat10; // Сумма налога по ставке 10% double AmtVat00; // Сумма расчета по ставке 0% @@ -21884,7 +21882,6 @@ class PPObjAccount : public PPObjReference { virtual int Write(PPObjPack *, PPID *, void * stream, ObjTransmContext *); virtual int ProcessObjRefs(PPObjPack * p, PPObjIDArray * ary, int replace, ObjTransmContext * pCtx); int AddCurRecord(const PPAccount * pBaseRec, PPID curID); - // @v10.2.12 (dup of PPObjReference::ExtraPtr) void * ExtraPtr; public: virtual StrAssocArray * MakeStrAssocList(void * extraPtr /*acySelType*/); }; @@ -22342,7 +22339,7 @@ class PPSyncCashSession { // <0 - функция не поддерживается // 0 - ошибка (на уровне самой функции, но не ошибка в работе оборудования) // - virtual int Diagnostics(StringSet * pSs) { return -1; } // @v10.5.12 + virtual int Diagnostics(StringSet * pSs) { return -1; } const char * GetName() const { return Name; } PPSlipFormatter * GetSlipFormatter() { return P_SlipFmt; } int CompleteSession(PPID sessID); @@ -22522,8 +22519,7 @@ class PPAsyncCashSession : public CSessGrouping { int AddTempCheckSCardID(PPID checkID, PPID scardID); int AddTempCheckGiftCardID(PPID checkID, PPID giftCardID); void SetupTempCcLineRec(TempCCheckLineTbl::Rec * pRec, long ccID, long ccCode, LDATE dt, int div, PPID goodsID); - // @v10.7.3 void SetTempCcLineValues(TempCCheckLineTbl::Rec * pRec, double qtty, double price, double discount, const PPExtStrContainer * pLnExtStrings); - int SetTempCcLineValuesAndInsert(TempCCheckLineTbl * pTbl, double qtty, double price, double discount, PPExtStrContainer * pLnExtStrings); // @v10.7.3 + int SetTempCcLineValuesAndInsert(TempCCheckLineTbl * pTbl, double qtty, double price, double discount, PPExtStrContainer * pLnExtStrings); int GetExpPathSet(StringSet *); int FASTCALL CheckCnFlag(long); int FASTCALL CheckCnExtFlag(long); @@ -22733,7 +22729,7 @@ class BarcodeLabelPrinter { #define PLMF_DISABLCEDISCOUNT 0x00000800 // Запрет на установку общей скидки по заказу #define PLMF_REGISTERED 0x00001000 // Признак состоявшейся централизованной регистрации устройса. Если установлен, то последующая регистрация не возможна #define PLMF_BLOCKED 0x00002000 // Признак блокированного (украденного) устройства -#define PLMF_TREATDUEDATEASDATE 0x00004000 // @v10.8.11 При импорте заказов трактовать дату исполнения заказа как основную дату документа +#define PLMF_TREATDUEDATEASDATE 0x00004000 // При импорте заказов трактовать дату исполнения заказа как основную дату документа #define PLMF_EXPZSTOCK 0x00008000 // @v11.4.3 Экспортировать товары с нулевым остатком #define PLMF_EXPGOODSEXPIRYTAGS 0x00010000 // @v11.6.2 (Stylo-Q) Экспортировать атрибуты сроков годности товаров (самая ранняя expiry-дата). #define PLMF_INHMASK (PLMF_IMPASCHECKS|PLMF_EXPCLIDEBT|PLMF_EXPSELL|PLMF_EXPBRAND|PLMF_EXPLOC|PLMF_EXPSTOPFLAG|PLMF_DISABLCEDISCOUNT|PLMF_TREATDUEDATEASDATE|PLMF_EXPZSTOCK|PLMF_EXPGOODSEXPIRYTAGS) @@ -23048,11 +23044,9 @@ class PPObjStyloPalm : public PPObjReference { TSVector * P_BrandList; TSVector * P_WhList; TSVector * P_GgList; - // @v10.8.6 StrAssocArray QkList; }; virtual int HandleMsg(int msg, PPID _obj, PPID _id, void * extraPtr); virtual StrAssocArray * MakeStrAssocList(void * extraPtr); - // @v10.8.6 int CreateQkList(ExportBlock & rBlk); int CreateBrandList(ExportBlock & rBlk); int CreateWhList(ExportBlock & rBlk); int CreateGoodsGrpList(ExportBlock & rBlk); @@ -23259,8 +23253,8 @@ struct PhnSvcChannelStatus { SString EffConnectedLineName; SString Application; SString Data; - SString BridgeId; // @v10.0.01 - SString IdentifiedCallerName; // @v10.0.01 + SString BridgeId; + SString IdentifiedCallerName; }; class PhnSvcChannelStatusPool : SVector, SStrGroup { @@ -23296,8 +23290,8 @@ class PhnSvcChannelStatusPool : SVector, SStrGroup { uint EffConnectedLineNameP; uint ApplicationP; uint DataP; - uint BridgeIdP; // @v10.0.02 - uint IdentifiedCallerNameP; // @v10.0.01 Позиция строки имени, идентифицированного вне телефонного сервера + uint BridgeIdP; + uint IdentifiedCallerNameP; // Позиция строки имени, идентифицированного вне телефонного сервера }; }; @@ -23754,18 +23748,8 @@ struct PPSendSmsParam { int SmsCount; SString ExtStr; // @anchor }; - -/* @v10.3.8 (unused) class PPObjSendSms : public PPObjReference { -public: - PPObjSendSms(void * extraPtr = 0); - //virtual int Edit(PPID *, long); - //virtual int Browse(long extra); - int Get(PPID id, PPSendSmsParam *); - int Put(PPID * pID, PPSendSmsParam *, int use_ta); -};*/ // // @v7.6.1 @Muxa { -// // @ModuleDecl(PPObjUhttStore) // struct PPUhttStore { // @size=sizeof(Reference2Tbl::Rec) @@ -24122,7 +24106,7 @@ class PPObjBarCodeStruc : public PPObjReference { // разделов (документы без товарных строк) #define DBDIVF_PASSIVE 0x0010L // Пассивный раздел #define DBDIVF_FOREIGN 0x0020L // "Чужой" раздел. Используется для маршрутизации передачи пакетов между разделами -#define DBDIVF_MQBEXCHANGE 0x0040L // @v10.5.4 Раздел обменивается посредством брокера сообщений +#define DBDIVF_MQBEXCHANGE 0x0040L // Раздел обменивается посредством брокера сообщений struct PPDBDiv2 { // @persistent @store(Reference2Tbl+) // @@ -24138,7 +24122,7 @@ struct PPDBDiv2 { // @persistent @store(Reference2Tbl+) fConsolid = 0x0008, // Раздел, принимающий консолидирующую информацию из других разделов (документы без товарных строк) fPassive = 0x0010, // Пассивный раздел fForeign = 0x0020, - fMqbExchange = 0x0040 // @v10.5.4 Раздел обменивается посредством брокера сообщений + fMqbExchange = 0x0040 // Раздел обменивается посредством брокера сообщений }; long Tag; // Const=PPOBJ_DBDIV long ID; // @id @@ -24251,8 +24235,8 @@ struct PPGoodsType2 { // @persistent @store(Reference2Tbl+) long ID; // char Name[48]; // @name char Symb[20]; // - char Reserve[28]; // @reserve // @v10.7.2 [32]-->[28] - long ChZnProdType; // @v10.7.2 + char Reserve[28]; // @reserve + long ChZnProdType; // double StockTolerance; // Величина толерантности к дефициту либо к излишку товара. // Если доступный остаток меньше требуемого на величину, не превышающую StockTolerance // то расходуется то, что есть. @@ -24817,17 +24801,17 @@ class PPObjGoodsStruc : public PPObjReference { int SelectorDialog(const TSCollection & rList, uint * pSelectionPos); int SelectorDialog(PPID * pNamedGsID); int CheckStructs(); - struct CheckGsProblem { + struct CheckGsProblem : public SCompoundError { // @v12.1.11 inherited from SCompoundError enum { errRecur = 1, // Рекурсивная структура errUnRef, // Ни один товар не ссылается на структуру errNoNameAmbig, // На неименованную структуру ссылается более одного товара errNamedEmptyName // Именованная структура содержит пустое наименование }; - PPID GsID; - int RowN; - int Code; - SString Text; + // @v12.1.11 PPID GsID; + // @v12.1.11 int RowN; + // @v12.1.11 int Code; + // @v12.1.11 SString Text; }; int CheckStruct(PPIDArray * pGoodsIDs, PPIDArray * pStructIDs, const PPGoodsStruc * pStruct, TSCollection * pProblemList, PPLogger * pLogger); @@ -28574,7 +28558,7 @@ class PPViewPerson : public PPView { int EditItem(PPID); int DeleteItem(PPID); int OpenClientDir(PPID personId); - int EditRegs(PPID id, int oneReg); + int EditRegs(PPID personID, PPID locID, int oneReg); int EditDlvrAddrExtFlds(PPID id); int ViewRelations(PPID); int AddRelation(PPID); @@ -28613,6 +28597,7 @@ class PPViewPerson : public PPView { int RemoveHangedAddr(); int Recover(); int Helper_InsertTempRec(const TempPersonTbl::Rec & rRec); + int Helper_GetTagValue(PPObjID oid, PPID tagID, SString & rBuf); // // Рассылка сообщений по email // @@ -31608,13 +31593,13 @@ class GoodsStrucTreeListViewBlock { #define ALBATROSEXSTR_VETISUSER 6 // #define ALBATROSEXSTR_VETISPASSW 7 // #define ALBATROSEXSTR_VETISAPIKEY 8 // -#define ALBATROSEXSTR_VETISDOCTUSER 9 // @v10.1.0 -#define ALBATROSEXSTR_VETISDOCTPASSW 10 // @v10.1.0 -#define ALBATROSEXSTR_MQC_HOST 11 // @v10.5.2 Адрес сервера брокера сообщений -#define ALBATROSEXSTR_MQC_USER 12 // @v10.5.2 Имя доступа к брокеру сообщений -#define ALBATROSEXSTR_MQC_SECRET 13 // @v10.5.2 Пароль доступа к брокеру сообщений -#define ALBATROSEXSTR_MQC_DATADOMAIN 14 // @v10.5.2 Домен данных -#define ALBATROSEXSTR_MQC_VIRTHOST 15 // @v10.6.0 Виртуальный хост +#define ALBATROSEXSTR_VETISDOCTUSER 9 // +#define ALBATROSEXSTR_VETISDOCTPASSW 10 // +#define ALBATROSEXSTR_MQC_HOST 11 // Адрес сервера брокера сообщений +#define ALBATROSEXSTR_MQC_USER 12 // Имя доступа к брокеру сообщений +#define ALBATROSEXSTR_MQC_SECRET 13 // Пароль доступа к брокеру сообщений +#define ALBATROSEXSTR_MQC_DATADOMAIN 14 // Домен данных +#define ALBATROSEXSTR_MQC_VIRTHOST 15 // Виртуальный хост struct PPAlbatrosCfgHdr { // @persistent @store(PropertyTbl) enum { @@ -31626,23 +31611,23 @@ struct PPAlbatrosCfgHdr { // @persistent @store(PropertyTbl) fUncondAcceptEdiIntrMov = 0x0004, // Безусловный акцепт внутренних перемещений, продублированных по каналу EDI fUseOwnEgaisObjects = 0x0008, // Использовать собственную базу данных объектов ЕГАИС fUseDateInBillAnalog = 0x0010, // Использовать критерий даты при поиске аналога документа - fStrictExpGtinCheck = 0x0020, // @v10.0.04 Строгая проверка передаваемых кодов товара на принадлежность EAN/UPC - fVetisTestContour = 0x0040 // @v10.5.1 Используется тестовый контур ВЕТИС + fStrictExpGtinCheck = 0x0020, // Строгая проверка передаваемых кодов товара на принадлежность EAN/UPC + fVetisTestContour = 0x0040 // Используется тестовый контур ВЕТИС }; PPID Tag; // Const=PPOBJ_CONFIG PPID ID; // Const=PPCFG_MAIN PPID Prop; // Const=PPPRP_ALBATROSCFG2 uint32 Size; // Полный размер записи. Если Size == 0, то запись представлена в формате pre7.2.7 и имеет размер sizeof(PropertyTbl) char Reserve[20]; // @reserve - int16 VetisCertDelay; // @v10.1.10 Максимальная задержка в днях от даты выпуска сертификата до получения накладной с ним + int16 VetisCertDelay; // Максимальная задержка в днях от даты выпуска сертификата до получения накладной с ним // Примениятся для фильтрации документов при связывании с сертификатами. - int16 VetisTimeout; // @v10.1.0 Таймаут ожидания ответа на application request (секунд). По умолчанию - 60 + int16 VetisTimeout; // Таймаут ожидания ответа на application request (секунд). По умолчанию - 60 PPID EgaisRetOpID; // Вид (драфт) операции возврата от покупателя, принятого с сервера ЕГАИС long Flags; // @flags PPID EgaisRcptOpID; // ->Ref(PPOBJ_OPRKIND) Вид (драфт)операции прихода от поставщика, принятого с сервера ЕГАИС - PPID EdiOrderOpID; // ->Ref(PPOBJ_OPRKIND) // @v9.2.1 OrderOpID-->EdiOrderOpID - PPID EdiOrderSpOpID; // ->Ref(PPOBJ_OPRKIND) // @v9.2.1 OrderSpOpID-->EdiOrderSpOpID - PPID EdiDesadvOpID; // ->Ref(PPOBJ_OPRKIND) // @v9.2.1 DesadvOpID-->EdiDesadvOpID + PPID EdiOrderOpID; // ->Ref(PPOBJ_OPRKIND) + PPID EdiOrderSpOpID; // ->Ref(PPOBJ_OPRKIND) + PPID EdiDesadvOpID; // ->Ref(PPOBJ_OPRKIND) PPID RcptTagID; // ->Ref(PPOBJ_TAG) PPID TtnTagID; // ->Ref(PPOBJ_TAG) PPID SmsAccID; // ->Ref(PPOBJ_SMSPRVACCOUNT) ИД учетной записи SMS-клиента @@ -31883,10 +31868,10 @@ class PrcssrAlcReport { long WrOffShopWay; // PPID EgaisInvOpID; // Вид операции инвентаризации - необходим для идентификации видов операций // списания излишков и недостач. - TimeRange RtlSaleAllwTime; // @v10.2.4 Время, в течении которого разрешена розничная торговля алкоголем - PPID ManufOpID; // @v10.6.3 Вид операции производства (PPOPT_GOODSMODIF). Используется для обмена с ВЕТИС + TimeRange RtlSaleAllwTime; // Время, в течении которого разрешена розничная торговля алкоголем + PPID ManufOpID; // Вид операции производства (PPOPT_GOODSMODIF). Используется для обмена с ВЕТИС PPID SupplAgentID; // @v11.0.8 ->Article.ID Агент поставщика - uint8 Reserve[20]; // @v10.2.4 [36]-->[28] // @v10.6.3 [28]-->[24] // @v11.0.8 [24]-->[20] + uint8 Reserve[20]; // @v11.0.8 [24]-->[20] }; ExtBlock E; // @anchor PPIDArray StorageLocList; // @anchor @@ -32241,8 +32226,8 @@ class GoodsStrucFilt : public PPBaseFilt { fShowSubst = 0x0004, // Показывать подстановочные структуры fShowGift = 0x0008, // Показывать подарочные структуры fShowComplex = 0x0010, // Показывать комплексные структуры - fShowUnrefs = 0x0020, // @v10.0.10 Показывать структуры, на которые не ссылается ни один товар - fSkipByPassiveOwner = 0x0040, // @v10.3.2 Не показывать структуры, все товары-владельцы которых пассивные + fShowUnrefs = 0x0020, // Показывать структуры, на которые не ссылается ни один товар + fSkipByPassiveOwner = 0x0040, // Не показывать структуры, все товары-владельцы которых пассивные fShowTech = 0x0080, // @v11.7.6 Показывать связанные технологии fShowEstValue = 0x0100 // @v11.8.2 Показывать оценочную стоимость структуры }; @@ -32319,7 +32304,7 @@ class PPViewGoodsStruc : public PPView { IterOrder CurrentViewOrder; GoodsStrucFilt Filt; GoodsStrucProcessingBlock Cb; - TSArray * P_DsList__; // @v10.7.5 + TSArray * P_DsList__; TSCollection Problems; // Список проблем, выявленных функцией Recover() void * H_AsideListWindow; // @v11.1.12 Список иерархии структур }; @@ -32336,7 +32321,7 @@ struct GoodsToObjAssocFilt : public PPBaseFilt { PPID AsscType; // PPID ObjType; // PPID ObjID; // - void * ExtraPtr; // @v10.3.2 long-->(void *) + void * ExtraPtr; // long Flags; // long Reserve; // @anchor LocationFilt * P_LocF; // @@ -32469,7 +32454,7 @@ class DeviceLoadingStat : public DvcLoadingStatTbl { RAssocArray SCardList; SVector GoodsList; SVector StatCache; - PPIDArray UpdatedBillList; // @v10.2.11 + PPIDArray UpdatedBillList; }; // // Descr: Класс AsyncCashGoodsGroupIterator, испольуемый для экспорта товарных групп в асинхронный кассовый модуль. @@ -32547,19 +32532,18 @@ struct AsyncCashGoodsInfo { // @transient // Если флаг CASHFX_APPLYUNITRND не задан или единица измерения имеет Rounding == 0, // то Precision = 0.001. long GoodsFlags; // Флаги записи товара - // @v10.4.11 short Deleted_; // Признак того, что товар был удален LDATE Expiry; // @v11.9.5 Срок истечения годности @todo - long Flags_; // @v10.4.11 + long Flags_; // short NoDis; // Запрет скидки на товар (> 0 - без скидки, 0 - со скидкой, -1 - со скидкой (признак "без скидки" был снят) - int16 ChZnProdType; // @v10.9.0 Reserve-->ChZnProdType Тип маркированной продукции честный знак + int16 ChZnProdType; // Тип маркированной продукции честный знак long DivN; // Номер отдела PPID LocPrnID; // ->Ref(PPOBJ_LOCPRINTER) char LocPrnSymb[20]; // Символ локального принтера LocPrnID PPID AsscPosNodeID; // Ассоциированный с товаром кассовый аппарат char AsscPosNodeSymb[20]; // Символ ассоциированного с товаров кассового аппарата double VatRate; // Ставка НДС - RealRange AllowedPriceR; // @v10.6.4 Допустимый диапазон цен, рассчитанный на основании ограничений товарных величин. - S_GUID Uuid; // @v10.0.04 UUID товара, извлеченный из тега PPTAG_GOODS_UUID + RealRange AllowedPriceR; // Допустимый диапазон цен, рассчитанный на основании ограничений товарных величин. + S_GUID Uuid; // UUID товара, извлеченный из тега PPTAG_GOODS_UUID RAssocArray QuotList; // Список дополнительных котировок. // Вызывающая функция заполняет поля Key идентификаторами видов котировок. // AsyncCashGoodsIterator инициализирует поля Val массива соответствующими @@ -32577,10 +32561,10 @@ struct AsyncCashGoodsInfo { // @transient #define ACGIF_UNCONDBASEPRICE 0x0010 // Базовая цена - без учета розничных котировок. // Инициализируется самим классом AsyncCashGoodsIterator как проекция флага PPEquipConfig::fUncondAsyncBasePrice #define ACGIF_EXCLALTFOLD 0x0020 // @internal Товарная группа, заданная в кассовом узле является группой-папкой эксклюзивных альтернат групп. -#define ACGIF_ALLCODESPERITER 0x0040 // @v9.0.6 Все коды товара передавать в одной итерации -#define ACGIF_REDOSINCEDLS 0x0080 // @v9.0.11 Повторная выгрузка данных, которые были начиная с заданного DLSID -#define ACGIF_ENSUREUUID 0x0100 // @v10.0.04 Итератор гарантирует наличие UUID'а у товара, возвращаемого очередной итерацией. -#define ACGIF_IGNOREGWODISTAG 0x0200 // @v10.6.11 Игнорировать признак товаров 'без скидки'. Флаг выставляется автоматически функцией Init по +#define ACGIF_ALLCODESPERITER 0x0040 // Все коды товара передавать в одной итерации +#define ACGIF_REDOSINCEDLS 0x0080 // Повторная выгрузка данных, которые были начиная с заданного DLSID +#define ACGIF_ENSUREUUID 0x0100 // Итератор гарантирует наличие UUID'а у товара, возвращаемого очередной итерацией. +#define ACGIF_IGNOREGWODISTAG 0x0200 // Игнорировать признак товаров 'без скидки'. Флаг выставляется автоматически функцией Init по // флагу конфигурации оборудования PPEquipConfig::fIgnoreNoDisGoodsTag. Внешняя установка флага игнорируется. class AsyncCashGoodsIterator { @@ -32673,10 +32657,10 @@ class AsyncCashGoodsIterator { PPIDArray GdsClsList; // Классы товаров PPIDArray GdsTypeList; // Типы товаров PPIDArray UpdGoods; // - PPIDArray RmvGoods; // @v10.6.8 Товары, для которых следует отправить уведомление об удалении + PPIDArray RmvGoods; // Товары, для которых следует отправить уведомление об удалении PPIDArray IterGoodsList; // PPIDArray NoDisToggleGoodsList; // Список товаров, по которым был снят признак "без скидки" (за заданный период) - PPIDArray UpdatedBillList; // @v10.2.11 Список измененных документов, по которым идентифицированы модифицированные товары. + PPIDArray UpdatedBillList; // Список измененных документов, по которым идентифицированы модифицированные товары. // Список сохраняется в DlsObjTbl в диагностических целях. PPQuotArray QuotByQttyList; // Список котировок, применяемых для скидки на кол-во товара BarcodeArray Codes; // Список кодов для текущего товара @@ -32800,7 +32784,7 @@ class PPViewQuot : public PPView { int FirstQuotBrwColumn; int HasPeriodVal; // Временная таблица содержит по крайней мере одно значение, ограниченное периодом действия // const PPObjQuotKind::Special Spc; - GoodsSubstList Gsl; // @v10.1.3 + GoodsSubstList Gsl; }; // // @ModuleDecl(PPObjScale) @@ -32822,17 +32806,17 @@ struct PPScale2 { // @persistent @store(Reference2Tbl+) char Name[48]; // @name @!refname char Symb[20]; // PPID ParentID; // Ид. группы весов - SVerT Ver_Signature; // @v10.5.7 Сигнатура версии. Необходима для индикации факта конвертации v10.5.7 + SVerT Ver_Signature; // Сигнатура версии. Необходима для индикации факта конвертации v10.5.7 uint16 Get_NumTries; // @#{0..32000} // System param uint16 Get_Delay; // @#{0..1000} // System param uint16 Put_NumTries; // @#{0..32000} // System param uint16 Put_Delay; // @#{0..1000} // System param int16 BcPrefix; // Префикс искусственного штирхкода, загружаемого на весы int16 MaxAddedLn; // Максимальная длина строки дополнительного текста. Если не указано, то система принимает значение на свое усмотрение. - int16 MaxAddedLnCount; // @v10.5.0 Максимальное количество строк дополнительного текста. + int16 MaxAddedLnCount; // Максимальное количество строк дополнительного текста. char FontSize[8]; // @v11.1.6 Размер шрифта. Специфичный для конкретной модели параметр. В общем случае может быть как // числовым, так и текстовым. На момент ввода применяется только для весов DIGI - char Reserve[14]; // @reserve @v10.5.0 [10]-->[8] // @v10.5.7 [8]+[8]+[4]+[2]-->[22] // @v11.1.6 [22]-->[14] + char Reserve[14]; // @reserve // @v11.1.6 [22]-->[14] PPID QuotKindID; // ->Ref(PPOBJ_QUOTKIND) Вид котировки, используемый для ценообразования // PPID ScaleTypeID; // Тип устройства long ProtocolVer; // Версия протокола обмена. Зависит от типа устройства @@ -33348,7 +33332,7 @@ class BVATAccmArray : public TSVector { #define CILTIF_MOD 0x1000 // Функция ConvertILTI должна изменить (удалить,добавить) строку в существующем документе #define CILTIF_REPFULLSYNCPROBLEM 0x2000 // Выводить в журнал synclot.log информацию о проблемах подстановки синхронизированного лота #define CILTIF_CAREFULLYALIGNPRICE 0x4000 // Выравнивать цену реализации результирующих строк по исходной сумме в ценах реализации -#define CILTIF_CUTRESTTOZERO 0x8000 // @v10.7.4 Остатки по лотам срезать до нуля +#define CILTIF_CUTRESTTOZERO 0x8000 // Остатки по лотам срезать до нуля // // Опции выбора даты зачетной оплаты (PPObjBill::Reckon()) // @@ -33483,7 +33467,7 @@ struct PPBillConfig { // @persistent @store(cvt:PropertyTbl) PPID ValuationQuotKindID; // ->Ref(PPOBJ_QUOTKIND) Вид котировки для расценки приходных документов double ValuationRndPrec; // Точность округления при расценке char UniqSerialSfx[16]; // Сигнатура суффикса, присоединяемого к серийному номеру для обеспечения его уникальности. - int16 WarnLotExpirDays; // @v10.4.4 Количество дней до предупреждения об истечении срока годности лота (отрицательные значения - после даты истечения) + int16 WarnLotExpirDays; // Количество дней до предупреждения об истечении срока годности лота (отрицательные значения - после даты истечения) // // Descr: Опции обработки ситуации с угрозой истечения срока годности лота // @@ -33492,11 +33476,11 @@ struct PPBillConfig { // @persistent @store(cvt:PropertyTbl) wlefDisalbePosOp = 0x0002, // Блокировка розничной продажи wlefDisableBillOp = 0x0004 // Блокировка отгрузки клиентам }; - uint16 WarnLotExpirFlags; // @v10.4.4 Опции действий при угрозе истечения срока годности лота + uint16 WarnLotExpirFlags; // Опции действий при угрозе истечения срока годности лота SVerT Ver; // @anchor Версия, сформировавшая запись. TagFilt TagIndFilt; // @anchor Фильтр тегов, определяющий окраску номеров документов в отчетах SString AddFilesFolder; // Папка для автоматического присоединения файлов к документам. Строка хранится в реестре, а не в БД. - TagFilt LotTagIndFilt; // @v10.4.3 Фильтр тегов, определяющий окраску лотов + TagFilt LotTagIndFilt; // Фильтр тегов, определяющий окраску лотов }; // // @@ -33590,7 +33574,7 @@ struct AutoFillInvFilt { AutoFillInvFilt(); enum { fFillWithZeroQtty = 0x0001, - fRestrictZeroRestWithMtx = 0x0002, // @v10.5.6 Не добавлять в документ товары, которых нет на остатке и которые вне матрицы + fRestrictZeroRestWithMtx = 0x0002, // Не добавлять в документ товары, которых нет на остатке и которые вне матрицы fExcludeZeroRestPassiv = 0x0004 // @v11.1.2 Пассивные товары с нулевым остатком не включать безусловно (независимо от матрицы) }; PPID BillID; @@ -35181,13 +35165,13 @@ class PPViewLocTransf : public PPView { // #define OPG_BYZERODLVRADDR 0x00000010L // Перебирать только документы с пустым адресом доставки #define OPG_IGNOREZERO 0x00000020L // Игнорировать нулевые записи -#define OPG_MERGECORRECTION 0x00000040L // @v10.7.5 Модифицировать данные документов документами коррекции (если встречаются) +#define OPG_MERGECORRECTION 0x00000040L // Модифицировать данные документов документами коррекции (если встречаются) #define OPG_CALCINREST 0x00000080L // Считать входящий остаток (используется со структурой GoodsGrpngEntry) #define OPG_CALCOUTREST 0x00000100L // Считать исходящий остаток (используется со структурой GoodsGrpngEntry) #define OPG_FORCEGOODS 0x00000200L // Передается процедуре GCTFilterDialog, заставляя проверять обязательный ввод товара #define OPG_ADJPAYM 0x00000400L // For internal use #define OPG_STOREDAILYRESTS 0x00000800L // При переборе строк Transfer GCTIterator сохраняет информацию о ежедневных остатках товаров с детализацией по складам. -#define OPG_SETPRICEWOTAXES 0x00001000L // @v10.6.6 Устанавливать цены реализации без налогов +#define OPG_SETPRICEWOTAXES 0x00001000L // Устанавливать цены реализации без налогов #define OPG_LABELONLY 0x00002000L // #define OPG_NOZEROEXCISE 0x00004000L // Перебирать только подакцизные товары #define OPG_COMPAREWROFF 0x00008000L // Если перебор ведется по драфт-документам, то сравнивать с документами списания // @@ -35240,8 +35224,8 @@ class GCTFilt : public PPBaseFilt { ordByGoods, ordByArticle }; - uint8 ReserveStart[24]; // @anchor @v9.3.6 // @v10.0.04 [32]-->[24] - DateRange DueDatePeriod; // @v10.0.04 Период даты исполнения документа + uint8 ReserveStart[24]; // @anchor + DateRange DueDatePeriod; // Период даты исполнения документа DateRange Period; // Период обзора операций DateRange LotsPeriod; // Период приходов DateRange ShipmentPeriod; // Период отгрузки @@ -35348,7 +35332,7 @@ class AdjGdsGrpng { DateRange Period; PPIDArray BillList; - LAssocArray CorrectionBillList; // @v10.7.5 Список документов коррекции, ассоциированных со связанными документами + LAssocArray CorrectionBillList; // Список документов коррекции, ассоциированных со связанными документами PPIDArray SupplAgentBillList; private: int PrevPaymentList(const GCTFilt &); @@ -35650,7 +35634,7 @@ class PPObjVATBook : public PPObject { #define CSESSOPRT_CHGCCAGENT 0x00004000 // J Право на смену агента в чеке #define CSESSOPRT_MERGECHK 0x00010000 // M Право на объединение чеков #define CSESSOPRT_ESCCLINEBORD 0x00020000 // Q Удаление строк в чеках до отправки заказа на изготовление -#define CSESSOPRT_REPRNUNFCC 0x00040000 // 3 @v10.6.11 Право на повторную печать чека, по которому была ошибка печати на регистраторе +#define CSESSOPRT_REPRNUNFCC 0x00040000 // 3 Право на повторную печать чека, по которому была ошибка печати на регистраторе #define CSESSOPRT_ARBITRARYDISC 0x00080000 // 4 @v11.0.9 Право на предоставление произвольной скидки на чек (суммой либо в процентах) int GetOperRightsByKeyPos(int keyPos, PPIDArray * pOperRightsAry); @@ -35808,10 +35792,10 @@ struct PPSCardSeries2 { // @persistent @store(Reference2Tbl+) // Если VerifTag == 2, то запись сохранена в версии v9.8.9 или выше. PPID BonusGrpID; // Товарная группа, по которой зачитываются бонусы на карты PPID CrdGoodsGrpID; // Товарная группа, продажа товаров которой зачитывается как списание по кредитной карте в количественном выражении. - int32 FixedBonus; // @v10.5.5 (.01) Фиксированная сумма бонуса на один чек. Специальный сценарий. (для бонусных и кредитных карт) - PPID RsrvPoolDestSerID; // @v10.2.7 Серия, в которую должна переносится карта из резервного пула (которым является данная серия) при + int32 FixedBonus; // (.01) Фиксированная сумма бонуса на один чек. Специальный сценарий. (для бонусных и кредитных карт) + PPID RsrvPoolDestSerID; // Серия, в которую должна переносится карта из резервного пула (которым является данная серия) при // активации (динамическом сопоставлении с телефоном или персоналией) - long SpecialTreatment; // @v10.1.3 Идентификатор специальной трактовки операций с картами серии. + long SpecialTreatment; // Идентификатор специальной трактовки операций с картами серии. long QuotKindID_s; // Вид котировки long PersonKindID; // Вид персоналии, используемый для владельцев карт (по умолчанию - PPPRK_CLIENT) LDATE Issue; // Дата выпуска @@ -35934,7 +35918,7 @@ struct PPSCardConfig { // @persistent @store(PropertyTbl) // Флаг следует установить в разделе базы данных, обслуживающем магазин, в котором бонусные карты не // должны использоваться, в противоположность другим синхронизированным магазинам. fCheckBillDebt = 0x0010, // При операциях по карте проверять наличие простроченной задолженности по документам, привязанным к карте - fDisableBonusByDefault = 0x0020 // @v10.9.0 По умолчанию не применять бонус при расчете в кассовой панели (с возможностью ручного включения) + fDisableBonusByDefault = 0x0020 // По умолчанию не применять бонус при расчете в кассовой панели (с возможностью ручного включения) }; PPID Tag; // Const=PPOBJ_CONFIG PPID ID; // Const=PPCFG_MAIN @@ -35958,10 +35942,10 @@ struct SCardSeriesFilt { fOnlyGroups = 0x0001, // Только группы серий fOnlySeries = 0x0002, // Только терминальные серии fShowPassive = 0x0004, // Показывать пассивные серии - fOnlyReal = 0x0008 // @v10.2.8 Только "рабочие" серии (scstDiscount, scstCredit, scstBonus) + fOnlyReal = 0x0008 // Только "рабочие" серии (scstDiscount, scstCredit, scstBonus) }; PPID ParentID; // Группа серий - int SpecialTreatment; // @v10.9.0 + int SpecialTreatment; long Flags; // }; @@ -36002,7 +35986,7 @@ class PPObjSCardSeries : public PPObjReference { virtual void * CreateObjListWin(uint flags, void * extraPtr); virtual StrAssocArray * MakeStrAssocList(void * extraPtr); int Helper_GetChildList(PPID id, PPIDArray & rList, PPIDArray * pStack); - int AssignImages(ListBoxDef * pDef); // @v10.2.7 + int AssignImages(ListBoxDef * pDef); PPObjSCard * P_ScObj; }; @@ -36029,7 +36013,7 @@ class PPObjSCardSeries : public PPObjReference { #define SCRDF_NOTIFYDISCOUNT 0x00000040L // Извещать владельца карты об изменении скидки #define SCRDF_NOTIFYDRAW 0x00000080L // Извещать владельца карты о списании средств с карты #define SCRDF_NOTIFYWITHDRAW 0x00000100L // Извещать владельца карты о начислении средств на карту -#define SCRDF_OWNERVERIFIED 0x00000200L // @v10.1.3 Владелец карты верифицирован (например, посредством СМС) +#define SCRDF_OWNERVERIFIED 0x00000200L // Владелец карты верифицирован (например, посредством СМС) #define PPTRPROP_SCARDEXT (PPTRPROP_USER+1) @@ -36053,8 +36037,8 @@ class PPSCardPacket : public PPExtStrContainer { // #define SCRDSSPCTRT_DEFAULT 0 // default #define SCRDSSPCTRT_AZ 1 // AstraZeneca -#define SCRDSSPCTRT_UDS 2 // @v10.8.9 UDS -#define SCRDSSPCTRT_UHTT 3 // @v10.9.0 Universe-HTT (попытка унифицированного представления для технологии, используюемой до введения понятия SpecialTreatment +#define SCRDSSPCTRT_UDS 2 // UDS +#define SCRDSSPCTRT_UHTT 3 // Universe-HTT (попытка унифицированного представления для технологии, используюемой до введения понятия SpecialTreatment // // Descr: Базовый класс для реализации функционала специальной трактовки серий персональных карт // @@ -36085,7 +36069,7 @@ class SCardSpecialTreatment { fDefinedDiscount = 0x0001, // Значение Discount определено сервисом fDefinedRest = 0x0002, // Значение Rest определено сервисом fDefinedHash = 0x0004, // Значение Hash определено сервисом - fBonusDisabled = 0x0008 // @v10.9.6 Применение бонуса по карте при данной идентификации не допускается // + fBonusDisabled = 0x0008 // Применение бонуса по карте при данной идентификации не допускается // }; int SpecialTreatment; // Ид специальной трактовки поведения карт (из серии) long Flags; // @flags @@ -36182,16 +36166,15 @@ class PPObjSCard : public PPObject { PPID OwnerID; PPID LocID; SString Code; - SString Phone; // @v10.5.6 + SString Phone; }; - // @v10.5.5 (moved to PPConstParam) static const uint32 FiltSignature; // = 0xfbefffffU; // // Descr: Фильтр селектора (MakeStrAssocList) // struct Filt { Filt(); - const uint32 Signature; + const uint32 Signature; // PPConst::Signature_PPObjSCard_Filt PPID SeriesID; PPID OwnerID; }; @@ -44831,12 +44814,14 @@ class PPViewGoodsOpAnalyze : public PPView { { OrdList.Z(); ShipmList.Z(); + RetList.Z(); // @v12.1.11 CancelledOrdList.Z(); return *this; } - PPIDArray OrdList; - PPIDArray ShipmList; - PPIDArray CancelledOrdList; + PPIDArray OrdList; // Список документов заказа + PPIDArray ShipmList; // Список документов отгрузки + PPIDArray RetList; // @v12.1.11 Список документов возврата от покупателей + PPIDArray CancelledOrdList; // Список документов заказа которые были отменены }; MarketplaceDetailBlock MpDBlk; }; diff --git a/Src/Include/SLIB.H b/Src/Include/SLIB.H index 859fdf44ac..f9c50ac3f2 100644 --- a/Src/Include/SLIB.H +++ b/Src/Include/SLIB.H @@ -99,14 +99,14 @@ #include // @v11.7.1 #include #include - #include // @v10.8.1 + #include #include // @v11.0.7 #include // @v11.7.1 // @v10.4.3 #ifdef HAVE_UNISTD_H #include #endif - #include // @v10.9.3 + #include #endif #ifdef _WIN32 #ifndef __WIN32__ @@ -129,7 +129,7 @@ #pragma pack(8) #endif*/ #include - #include // @v10.9.9 + #include /* @v11.7.0 (выше определена директива установки выравнивания по умолчанию для компилятора) #if _M_X64 #pragma pack(pop) @@ -379,7 +379,7 @@ #define ADJ_LEFT 0 // По левому краю #define ADJ_RIGHT 1 // По правому краю #define ADJ_CENTER 2 // По центру -#define ADJ_ALIGN 3 // @v10.4.8 Выравнивание по всему направлению (по длине или высоте) с внутренней набивкой пространством между элементами +#define ADJ_ALIGN 3 // Выравнивание по всему направлению (по длине или высоте) с внутренней набивкой пространством между элементами // // Descr: Сторона "набивки" строк // @@ -459,7 +459,7 @@ #define AGGRFUNC_AVG 3 // Среднее арифметическое #define AGGRFUNC_MIN 4 #define AGGRFUNC_MAX 5 -#define AGGRFUNC_STDDEV 6 // @v10.5.6 Стандартное отклонение +#define AGGRFUNC_STDDEV 6 // Стандартное отклонение // // // @@ -10977,28 +10977,28 @@ public: CPP = 102, // CPP source file H = 103, // C header file Perl = 104, // perl source code - Php = 105, // php source code - Java = 106, // java source code - Py = 107, // Python source code - UnixShell = 108, // Unix Shell script - Msi = 109, // Microsoft Installer package - TxtUtf8 = 110, // Текст в формате utf8 - TxtAscii = 111, // Текст в котором только ASCII-символы - Log = 112, // Файл журнала (by ext only) + Php = 105, // php source code + Java = 106, // java source code + Py = 107, // Python source code + UnixShell = 108, // Unix Shell script + Msi = 109, // Microsoft Installer package + TxtUtf8 = 110, // Текст в формате utf8 + TxtAscii = 111, // Текст в котором только ASCII-символы + Log = 112, // Файл журнала (by ext only) Properties = 113, // Файл properties. Обычно текстовый файл аналогичный ini, но без зональности ([]). - Css = 114, // CSS + Css = 114, // CSS JavaScript = 115, // JS - Json = 116, // - Pbxproj = 117, // Файл проекта xcode + Json = 116, // + Pbxproj = 117, // Файл проекта xcode PapyruDbDivXchg = 118, // Приватный формат проекта Papyrus: файл обмена данными между разделами - Csv = 119, // @v10.8.0 comma-separated-values - Xsd = 120, // @v10.8.0 xml-schema-documentation - Gravity = 121, // @v10.8.2 gravity-source (язык gravity) - VCProjFilers = 122, // @v10.9.9 Visual Studio Project Filters - VCProjUser = 123, // @v10.9.9 Visual Studio Project User - CodeBlocks_Cbp = 124, // @v10.9.9 Code::Blocks Project File - M4 = 125, // @v10.9.9 m4 Macroprocessor - Tsv = 126, // @v10.9.9 tab-separated-values + Csv = 119, // comma-separated-values + Xsd = 120, // xml-schema-documentation + Gravity = 121, // gravity-source (язык gravity) + VCProjFilers = 122, // Visual Studio Project Filters + VCProjUser = 123, // Visual Studio Project User + CodeBlocks_Cbp = 124, // Code::Blocks Project File + M4 = 125, // m4 Macroprocessor + Tsv = 126, // tab-separated-values Webp = 127, // @v11.3.4 webp graphics format Otf = 128, // @v11.3.7 OpenType font file (4F 54 54 4F 00) Ttf = 129, // @v11.3.7 TrueType font file (00 01 00 00 00) diff --git a/Src/Include/imgui-support.h b/Src/Include/imgui-support.h index 6868c36f48..f6f2058a3b 100644 --- a/Src/Include/imgui-support.h +++ b/Src/Include/imgui-support.h @@ -164,6 +164,11 @@ class ImGuiSceneBase { RslvState = rstUndef; } } + void SetAsUnresolved() + { + Destroy(); + RslvState = rstUnresolved; + } bool SetTexture(void * pTexture) { bool ok = false; @@ -174,14 +179,12 @@ class ImGuiSceneBase { ok = true; } else { - RslvState = RslvState = rstUnresolved; + RslvState = rstUnresolved; } return ok; } - void * GetTexture() - { - return P_Texture; - } + void * GetTexture() { return P_Texture; } + int GetState() const { return RslvState; } private: void * P_Texture; int RslvState; // @v12.1.11 CommonTextureCacheEntry::stXXX diff --git a/Src/Include/libxml/parser.h b/Src/Include/libxml/parser.h index 73a9e83e97..e3f01788e2 100644 --- a/Src/Include/libxml/parser.h +++ b/Src/Include/libxml/parser.h @@ -607,7 +607,7 @@ typedef void (*startElementNsSAX2Func)(void * ctx, const xmlChar * localname, co typedef void (*endElementNsSAX2Func)(void * ctx, const xmlChar * localname, const xmlChar * prefix, const xmlChar * URI); struct xmlSAXHandler { - xmlSAXHandler(); // @v10.7.9 + xmlSAXHandler(); internalSubsetSAXFunc internalSubset; isStandaloneSAXFunc isStandalone; hasInternalSubsetSAXFunc hasInternalSubset; diff --git a/Src/Include/ppbrow.h b/Src/Include/ppbrow.h index 96f1e247c3..7e3a08ce9f 100644 --- a/Src/Include/ppbrow.h +++ b/Src/Include/ppbrow.h @@ -44,18 +44,18 @@ #define HELP_BROWSER_PERSONCT 2 #define BROWSER_PERSONATTR_REGISTER 3 // @{person_pl} {%s} #define HELP_BROWSER_PERSONATTR_REGISTER 3 -#define BROWSER_PERSONATTR_BNKACCT 4 // @{bankaccount_pl} {%s} - #define HELP_BROWSER_PERSONATTR_BNKACCT 4 -#define BROWSER_PERSONATTR_PHONEADDR 5 // {%s} - #define HELP_BROWSER_PERSONATTR_PHONEADDR 5 -#define BROWSER_PERSONATTR_EMAIL 6 // {%s} - #define HELP_BROWSER_PERSONATTR_EMAIL 6 -#define BROWSER_PERSONATTR_DLVRADDR 7 // {%s} - #define HELP_BROWSER_PERSONATTR_DLVRADDR 7 -#define BROWSER_PERSONATTR_STDALNADDR 8 // @{autonomousaddress_pl} - #define HELP_BROWSER_PERSONATTR_STDALNADDR 8 -#define BROWSER_PERSONATTR_TAG 9 // @{persontag_pl} {%s} - #define HELP_BROWSER_PERSONATTR_TAG 9 +#define BROWSER_PERSONATTR_TAG 4 // @{persontag_pl} {%s} + #define HELP_BROWSER_PERSONATTR_TAG 4 +#define BROWSER_PERSONATTR_DLVRADDR 5 // {%s} + #define HELP_BROWSER_PERSONATTR_DLVRADDR 5 +#define BROWSER_PERSONATTR_BNKACCT 6 // @{bankaccount_pl} {%s} + #define HELP_BROWSER_PERSONATTR_BNKACCT 6 +#define BROWSER_PERSONATTR_PHONEADDR 7 // {%s} + #define HELP_BROWSER_PERSONATTR_PHONEADDR 7 +#define BROWSER_PERSONATTR_EMAIL 8 // {%s} + #define HELP_BROWSER_PERSONATTR_EMAIL 8 +#define BROWSER_PERSONATTR_STDALNADDR 9 // @{autonomousaddress_pl} + #define HELP_BROWSER_PERSONATTR_STDALNADDR 9 #define BROWSER_PERSONREL 10 // @{personrelation_pl} #define HELP_BROWSER_PERSONREL 10 #define BROWSER_ARTICLE 11 // @{view_article} {%s} diff --git a/Src/Include/slui.h b/Src/Include/slui.h index 54bfc67569..69210905d5 100644 --- a/Src/Include/slui.h +++ b/Src/Include/slui.h @@ -5572,7 +5572,7 @@ struct RowHeightInfo { HWND FASTCALL GetNextBrowser(HWND hw, int reverse); -class TBaseBrowserWindow : public /*TWindow*/TWindowBase { +class TBaseBrowserWindow : public TWindowBase { public: ~TBaseBrowserWindow(); struct IdentBlock { @@ -5597,7 +5597,6 @@ class TBaseBrowserWindow : public /*TWindow*/TWindowBase { int Insert(); uint GetResID() const; void SetResID(uint res); - // @v10.9.11 void SetToolbarID(uint toolbarID); enum { IdBiasBrowser = 0x00100000, diff --git a/Src/OSF/CAIRO-1160/SRC/cairo-scaled-font.c b/Src/OSF/CAIRO-1160/SRC/cairo-scaled-font.c index 0fd212bb99..147bb21cbf 100644 --- a/Src/OSF/CAIRO-1160/SRC/cairo-scaled-font.c +++ b/Src/OSF/CAIRO-1160/SRC/cairo-scaled-font.c @@ -1251,13 +1251,7 @@ void cairo_scaled_font_text_extents(cairo_scaled_font_t * scaled_font, const cha SAlloc::F(glyphs); return; ZERO_EXTENTS: - // @v10.7.8 extents->x_bearing = 0.0; - // @v10.7.8 extents->y_bearing = 0.0; - // @v10.7.8 extents->width = 0.0; - // @v10.7.8 extents->height = 0.0; - // @v10.7.8 extents->x_advance = 0.0; - // @v10.7.8 extents->y_advance = 0.0; - memzero(extents, sizeof(*extents)); // @v10.7.8 + memzero(extents, sizeof(*extents)); } /** * cairo_scaled_font_glyph_extents: @@ -1286,13 +1280,7 @@ void cairo_scaled_font_glyph_extents(cairo_scaled_font_t * scaled_font, const ca double min_x = 0.0, min_y = 0.0, max_x = 0.0, max_y = 0.0; boolint visible = FALSE; cairo_scaled_glyph_t * scaled_glyph = NULL; - // @v10.7.8 extents->x_bearing = 0.0; - // @v10.7.8 extents->y_bearing = 0.0; - // @v10.7.8 extents->width = 0.0; - // @v10.7.8 extents->height = 0.0; - // @v10.7.8 extents->x_advance = 0.0; - // @v10.7.8 extents->y_advance = 0.0; - memzero(extents, sizeof(*extents)); // @v10.7.8 + memzero(extents, sizeof(*extents)); if(UNLIKELY(scaled_font->status)) goto ZERO_EXTENTS; if(num_glyphs == 0) @@ -1365,13 +1353,7 @@ void cairo_scaled_font_glyph_extents(cairo_scaled_font_t * scaled_font, const ca _cairo_scaled_font_thaw_cache(scaled_font); return; ZERO_EXTENTS: - // @v10.7.8 extents->x_bearing = 0.0; - // @v10.7.8 extents->y_bearing = 0.0; - // @v10.7.8 extents->width = 0.0; - // @v10.7.8 extents->height = 0.0; - // @v10.7.8 extents->x_advance = 0.0; - // @v10.7.8 extents->y_advance = 0.0; - memzero(extents, sizeof(*extents)); // @v10.7.8 + memzero(extents, sizeof(*extents)); } slim_hidden_def(cairo_scaled_font_glyph_extents); diff --git a/Src/OSF/CAIRO-1160/SRC/cairo.c b/Src/OSF/CAIRO-1160/SRC/cairo.c index cf1570d733..da12c90216 100644 --- a/Src/OSF/CAIRO-1160/SRC/cairo.c +++ b/Src/OSF/CAIRO-1160/SRC/cairo.c @@ -2957,13 +2957,7 @@ void cairo_text_extents(cairo_t * cr, const char * utf8, cairo_text_extents_t * cairo_status_t status; cairo_glyph_t * glyphs = NULL; int num_glyphs = 0; - // @v10.7.8 extents->x_bearing = 0.0; - // @v10.7.8 extents->y_bearing = 0.0; - // @v10.7.8 extents->width = 0.0; - // @v10.7.8 extents->height = 0.0; - // @v10.7.8 extents->x_advance = 0.0; - // @v10.7.8 extents->y_advance = 0.0; - memzero(extents, sizeof(*extents)); // @v10.7.8 + memzero(extents, sizeof(*extents)); if(UNLIKELY(cr->status)) return; if(utf8) { @@ -3006,13 +3000,7 @@ void cairo_text_extents(cairo_t * cr, const char * utf8, cairo_text_extents_t * **/ void cairo_glyph_extents(cairo_t * cr, const cairo_glyph_t * glyphs, int num_glyphs, cairo_text_extents_t * extents) { - // @v10.7.8 extents->x_bearing = 0.0; - // @v10.7.8 extents->y_bearing = 0.0; - // @v10.7.8 extents->width = 0.0; - // @v10.7.8 extents->height = 0.0; - // @v10.7.8 extents->x_advance = 0.0; - // @v10.7.8 extents->y_advance = 0.0; - memzero(extents, sizeof(*extents)); // @v10.7.8 + memzero(extents, sizeof(*extents)); if(UNLIKELY(cr->status)) return; if(num_glyphs == 0) diff --git a/Src/OSF/GnuPlot-541gh/term/terminal-canvas.c b/Src/OSF/GnuPlot-541gh/term/terminal-canvas.c index b4e23ce5f9..8f2be2bba4 100644 --- a/Src/OSF/GnuPlot-541gh/term/terminal-canvas.c +++ b/Src/OSF/GnuPlot-541gh/term/terminal-canvas.c @@ -454,7 +454,7 @@ TERM_PUBLIC void CANVAS_graphics(GpTermEntry_Static * pThis) " gnuplot.zoom_axis_width = 0;\n" " gnuplot.zoom_in_progress = false;\n", CANVAS_name, CANVAS_name, CANVAS_name, CANVAS_name, CANVAS_name); fprintf(GPT.P_GpOutFile, " gnuplot.polar_mode = %s;\n gnuplot.polar_theta0 = %d;\n gnuplot.polar_sense = %d;\n ctx.clearRect(0,0,%d,%d);\n}\n", - (pThis->P_Gp->Gg.Polar ? "true" : "false"), (int)pThis->P_Gp->AxS.ThetaOrigin, (int)pThis->P_Gp->AxS.ThetaDirection, (int)(pThis->MaxX / CANVAS_OVERSAMPLE), (int)(pThis->MaxY / CANVAS_OVERSAMPLE)); + STextConst::GetBool(pThis->P_Gp->Gg.Polar), (int)pThis->P_Gp->AxS.ThetaOrigin, (int)pThis->P_Gp->AxS.ThetaDirection, (int)(pThis->MaxX / CANVAS_OVERSAMPLE), (int)(pThis->MaxY / CANVAS_OVERSAMPLE)); } fprintf(GPT.P_GpOutFile, "// Gnuplot version %s.%s\n", gnuplot_version, gnuplot_patchlevel); fprintf(GPT.P_GpOutFile, "// short forms of commands provided by gnuplot_common.js\n" diff --git a/Src/OSF/GnuPlot-541gh/term/terminal-post.c b/Src/OSF/GnuPlot-541gh/term/terminal-post.c index 53eabc2490..fe0eb643e5 100644 --- a/Src/OSF/GnuPlot-541gh/term/terminal-post.c +++ b/Src/OSF/GnuPlot-541gh/term/terminal-post.c @@ -1395,15 +1395,15 @@ end\n\ if(p_gp->TPsB.P_Params->psformat != PSTERM_EPS) fputs("%%Pages: (atend)\n", GPT.P_GpPsFile); fprintf(GPT.P_GpPsFile, psi2, - p_gp->TPsB.P_Params->color ? "true" : "false", - p_gp->TPsB.P_Params->blacktext ? "true" : "false", - p_gp->TPsB.P_Params->solid ? "true" : "false", + STextConst::GetBool(p_gp->TPsB.P_Params->color), + STextConst::GetBool(p_gp->TPsB.P_Params->blacktext), + STextConst::GetBool(p_gp->TPsB.P_Params->solid), p_gp->TPsB.P_Params->dash_length, /* dash length */ - p_gp->TPsB.P_Params->psformat == PSTERM_LANDSCAPE ? "true" : "false", - p_gp->TPsB.P_Params->level1 ? "true" : "false", - p_gp->TPsB.P_Params->level3 ? "true" : "false", - p_gp->TPsB.P_Params->rounded ? "true" : "false", - p_gp->TPsB.P_Params->clipped ? "true" : "false", + STextConst::GetBool(p_gp->TPsB.P_Params->psformat == PSTERM_LANDSCAPE), + STextConst::GetBool(p_gp->TPsB.P_Params->level1), + STextConst::GetBool(p_gp->TPsB.P_Params->level3), + STextConst::GetBool(p_gp->TPsB.P_Params->rounded), + STextConst::GetBool(p_gp->TPsB.P_Params->clipped), PS_LW*p_gp->TPsB.P_Params->linewidth_factor, /* line width */ p_gp->TPsB.P_Params->background.r, p_gp->TPsB.P_Params->background.g, @@ -1469,7 +1469,7 @@ end\n\ if(p_gp->TPsB.P_Params->duplex_option) { if(p_gp->TPsB.P_Params->level1) - fprintf(GPT.P_GpPsFile, "statusdict begin %s setduplexmode end\n", p_gp->TPsB.P_Params->duplex_state ? "true" : "false"); + fprintf(GPT.P_GpPsFile, "statusdict begin %s setduplexmode end\n", STextConst::GetBool(p_gp->TPsB.P_Params->duplex_state)); else if(!p_gp->TPsB.P_Params->duplex_state) fprintf(GPT.P_GpPsFile, "%%%%BeginFeature: *Duplex Simplex\n << /Duplex false >> setpagedevice\n%%%%EndFeature\n"); } @@ -2198,7 +2198,7 @@ TERM_PUBLIC void ENHPS_OPEN(GpTermEntry_Static * pThis, const char * fontname, d fontname = p_gp->TPsB.EnhFont; else PS_RememberFont(pThis, fontname); - snprintf(ENHps_opensequence, safelen, "[(%s) %.1f %.1f %s %s %d ", fontname, fontsize, base, widthflag ? "true" : "false", show_this ? "true" : "false", overprint); + snprintf(ENHps_opensequence, safelen, "[(%s) %.1f %.1f %s %s %d ", fontname, fontsize, base, STextConst::GetBool(widthflag), STextConst::GetBool(show_this), overprint); fprintf(GPT.P_GpPsFile, "%s(", ENHps_opensequence); ENHps_opened_string = TRUE; } diff --git a/Src/OSF/GnuPlot-541gh/term/terminal-pslatex.c b/Src/OSF/GnuPlot-541gh/term/terminal-pslatex.c index 2e457b2e80..e64070919d 100644 --- a/Src/OSF/GnuPlot-541gh/term/terminal-pslatex.c +++ b/Src/OSF/GnuPlot-541gh/term/terminal-pslatex.c @@ -529,8 +529,7 @@ void EPSLATEX_common_init(GpTermEntry_Static * pThis) \\gdef\\gplbacktext{}%%\n\ \\gdef\\gplfronttext{}%%\n\ \\makeatother\n", - (p_gp->TPsB.P_Params->color ? "true" : "false"), - (p_gp->TPsB.P_Params->blacktext ? "true" : "false") ); + STextConst::GetBool(p_gp->TPsB.P_Params->color), STextConst::GetBool(p_gp->TPsB.P_Params->blacktext)); /* use \expandafter\def\csname LT0\endcsname{...} * instead of \def\LT0{...} because digits may not be part of diff --git a/Src/OSF/GnuPlot-541gh/term/terminal-svg.c b/Src/OSF/GnuPlot-541gh/term/terminal-svg.c index 5d9e5b1093..3e5236bd11 100644 --- a/Src/OSF/GnuPlot-541gh/term/terminal-svg.c +++ b/Src/OSF/GnuPlot-541gh/term/terminal-svg.c @@ -947,7 +947,7 @@ TERM_PUBLIC void SVG_text(GpTermEntry_Static * pThis) MOUSE_PARAM("GPVAL_Y_MIN", "plot_axis_ymin"); MOUSE_PARAM("GPVAL_Y_MAX", "plot_axis_ymax"); } - fprintf(GPT.P_GpOutFile, "gnuplot_svg.polar_mode = %s;\n", p_gp->Gg.Polar ? "true" : "false"); + fprintf(GPT.P_GpOutFile, "gnuplot_svg.polar_mode = %s;\n", STextConst::GetBool(p_gp->Gg.Polar)); if(p_gp->Gg.Polar) { fprintf(GPT.P_GpOutFile, "gnuplot_svg.plot_axis_rmin = %g;\n", (p_gp->AxS.__R().autoscale & AUTOSCALE_MIN) ? 0.0 : p_gp->AxS.__R().set_min); fprintf(GPT.P_GpOutFile, "gnuplot_svg.plot_axis_rmax = %g;\n", p_gp->AxS.__R().set_max); diff --git a/Src/OSF/abseil-20230909/absl/flags/marshalling.cc b/Src/OSF/abseil-20230909/absl/flags/marshalling.cc index 85ce35d612..7478665cee 100644 --- a/Src/OSF/abseil-20230909/absl/flags/marshalling.cc +++ b/Src/OSF/abseil-20230909/absl/flags/marshalling.cc @@ -168,8 +168,8 @@ bool AbslParseFlag(absl::string_view text, std::string* dst, std::string*) { // -------------------------------------------------------------------- // AbslParseFlag for vector of strings. -bool AbslParseFlag(absl::string_view text, std::vector* dst, - std::string*) { +bool AbslParseFlag(absl::string_view text, std::vector* dst, std::string*) +{ // An empty flag value corresponds to an empty vector, not a vector // with a single, empty std::string. if(text.empty()) { @@ -183,43 +183,18 @@ bool AbslParseFlag(absl::string_view text, std::vector* dst, // -------------------------------------------------------------------- // AbslUnparseFlag specializations for various builtin flag types. -std::string Unparse(bool v) { - return v ? "true" : "false"; -} - -std::string Unparse(short v) { - return absl::StrCat(v); -} - -std::string Unparse(unsigned short v) { - return absl::StrCat(v); -} - -std::string Unparse(int v) { - return absl::StrCat(v); -} - -std::string Unparse(unsigned int v) { - return absl::StrCat(v); -} - -std::string Unparse(long v) { - return absl::StrCat(v); -} - -std::string Unparse(unsigned long v) { - return absl::StrCat(v); -} - -std::string Unparse(long long v) { - return absl::StrCat(v); -} - -std::string Unparse(unsigned long long v) { - return absl::StrCat(v); -} - -std::string Unparse(absl::int128 v) { +std::string Unparse(bool v) { return STextConst::GetBool(v); } +std::string Unparse(short v) { return absl::StrCat(v); } +std::string Unparse(unsigned short v) { return absl::StrCat(v); } +std::string Unparse(int v) { return absl::StrCat(v); } +std::string Unparse(unsigned int v) { return absl::StrCat(v); } +std::string Unparse(long v) { return absl::StrCat(v); } +std::string Unparse(unsigned long v) { return absl::StrCat(v); } +std::string Unparse(long long v) { return absl::StrCat(v); } +std::string Unparse(unsigned long long v) { return absl::StrCat(v); } + +std::string Unparse(absl::int128 v) +{ std::stringstream ss; ss << v; return ss.str(); diff --git a/Src/OSF/abseil-20230909/absl/strings/substitute.h b/Src/OSF/abseil-20230909/absl/strings/substitute.h index 58b21bb08e..c0df9ea6e2 100644 --- a/Src/OSF/abseil-20230909/absl/strings/substitute.h +++ b/Src/OSF/abseil-20230909/absl/strings/substitute.h @@ -171,12 +171,10 @@ class Arg { : piece_(scratch_, numbers_internal::SixDigitsToBuffer(value, scratch_)) { } - Arg(bool value) // NOLINT(google-explicit-constructor) - : piece_(value ? "true" : "false") { + Arg(bool value) : piece_(STextConst::GetBool(value)) { // NOLINT(google-explicit-constructor) } - template ::value>::type> + template ::value>::type> Arg( // NOLINT(google-explicit-constructor) const T& v, strings_internal::StringifySink&& sink = { }) diff --git a/Src/OSF/abseil/absl/flags/marshalling.cc b/Src/OSF/abseil/absl/flags/marshalling.cc index 8d54455f0b..c27b08dd21 100644 --- a/Src/OSF/abseil/absl/flags/marshalling.cc +++ b/Src/OSF/abseil/absl/flags/marshalling.cc @@ -104,7 +104,7 @@ bool AbslParseFlag(absl::string_view text, std::vector * dst, std:: // // AbslUnparseFlag specializations for various builtin flag types. // -std::string Unparse(bool v) { return v ? "true" : "false"; } +std::string Unparse(bool v) { return STextConst::GetBool(v); } std::string Unparse(short v) { return absl::StrCat(v); } std::string Unparse(unsigned short v) { return absl::StrCat(v); } std::string Unparse(int v) { return absl::StrCat(v); } diff --git a/Src/OSF/abseil/absl/strings/substitute.h b/Src/OSF/abseil/absl/strings/substitute.h index bed43cc1e1..9a0c040e16 100644 --- a/Src/OSF/abseil/absl/strings/substitute.h +++ b/Src/OSF/abseil/absl/strings/substitute.h @@ -133,7 +133,7 @@ class Arg { Arg(double value) : piece_(scratch_, numbers_internal::SixDigitsToBuffer(value, scratch_)) // NOLINT(runtime/explicit) { } - Arg(bool value) : piece_(value ? "true" : "false") // NOLINT(runtime/explicit) + Arg(bool value) : piece_(STextConst::GetBool(value)) // NOLINT(runtime/explicit) { } Arg(Hex hex); // NOLINT(runtime/explicit) diff --git a/Src/OSF/cyrus-sasl/plugins/digestmd5.c b/Src/OSF/cyrus-sasl/plugins/digestmd5.c index 93ede68a63..e8a80ba013 100644 --- a/Src/OSF/cyrus-sasl/plugins/digestmd5.c +++ b/Src/OSF/cyrus-sasl/plugins/digestmd5.c @@ -1836,19 +1836,15 @@ static int digestmd5_server_mech_new(void * glob_context, sasl_server_params_t * return SASL_OK; } -static int digestmd5_server_mech_step1(server_context_t * stext, - sasl_server_params_t * sparams, - const char * clientin __attribute__((unused)), - unsigned clientinlen __attribute__((unused)), - const char ** serverout, - unsigned * serveroutlen, - sasl_out_params_t * oparams __attribute__((unused))) +static int digestmd5_server_mech_step1(server_context_t * stext, sasl_server_params_t * sparams, + const char * clientin __attribute__((unused)), unsigned clientinlen __attribute__((unused)), + const char ** serverout, unsigned * serveroutlen, sasl_out_params_t * oparams __attribute__((unused))) { context_t * text = (context_t*)stext; int result; - char * realm; + char * realm; uchar * nonce; - char * charset = "utf-8"; + char * charset = "utf-8"; char qop[1024], cipheropts[1024]; struct digest_cipher * cipher; unsigned resplen; @@ -1857,72 +1853,62 @@ static int digestmd5_server_mech_step1(server_context_t * stext, sparams->utils->log(sparams->utils->conn, SASL_LOG_DEBUG, "DIGEST-MD5 server step 1"); /* get realm */ result = get_server_realm(sparams, &realm); - if(result != SASL_OK) return result; - + if(result != SASL_OK) + return result; /* what options should we offer the client? */ qop[0] = '\0'; cipheropts[0] = '\0'; if(stext->requiressf == 0) { - if(*qop) strcat(qop, ","); + if(*qop) + strcat(qop, ","); strcat(qop, "auth"); } if(stext->requiressf <= 1 && stext->limitssf >= 1) { - if(*qop) strcat(qop, ","); + if(*qop) + strcat(qop, ","); strcat(qop, "auth-int"); } cipher = available_ciphers; while(cipher->name) { /* do we allow this particular cipher? */ - if(stext->requiressf <= cipher->ssf && - stext->limitssf >= cipher->ssf) { + if(stext->requiressf <= cipher->ssf && stext->limitssf >= cipher->ssf) { if(!added_conf) { - if(*qop) strcat(qop, ","); + if(*qop) + strcat(qop, ","); strcat(qop, "auth-conf"); added_conf = 1; } - if(strlen(cipheropts) + strlen(cipher->name) + 1 >= 1024) + if((strlen(cipheropts) + strlen(cipher->name) + 1) >= 1024) return SASL_FAIL; - if(*cipheropts) strcat(cipheropts, ","); + if(*cipheropts) + strcat(cipheropts, ","); strcat(cipheropts, cipher->name); } cipher++; } - if(*qop == '\0') { - /* we didn't allow anything?!? we'll return SASL_TOOWEAK, since - that's close enough */ + /* we didn't allow anything?!? we'll return SASL_TOOWEAK, since that's close enough */ return SASL_TOOWEAK; } - /* * digest-challenge = 1#( realm | nonce | qop-options | stale | maxbuf | * charset | cipher-opts | auth-param ) */ - nonce = create_nonce(sparams->utils); if(nonce == NULL) { SETERROR(sparams->utils, "internal erorr: failed creating a nonce"); return SASL_FAIL; } - resplen = 0; text->out_buf = NULL; text->out_buf_len = 0; - if(add_to_challenge(sparams->utils, - &text->out_buf, &text->out_buf_len, &resplen, - "nonce", (uchar *)nonce, - TRUE) != SASL_OK) { + if(add_to_challenge(sparams->utils, &text->out_buf, &text->out_buf_len, &resplen, "nonce", (uchar *)nonce, TRUE) != SASL_OK) { SETERROR(sparams->utils, "internal error: add_to_challenge failed"); return SASL_FAIL; } - - /* add to challenge; if we chose not to specify a realm, we won't - * send one to the client */ - if(realm && add_to_challenge(sparams->utils, - &text->out_buf, &text->out_buf_len, &resplen, - "realm", (uchar *)realm, - TRUE) != SASL_OK) { + /* add to challenge; if we chose not to specify a realm, we won't send one to the client */ + if(realm && add_to_challenge(sparams->utils, &text->out_buf, &text->out_buf_len, &resplen, "realm", (uchar *)realm, TRUE) != SASL_OK) { SETERROR(sparams->utils, "internal error: add_to_challenge failed"); return SASL_FAIL; } @@ -1933,40 +1919,27 @@ static int digestmd5_server_mech_step1(server_context_t * stext, * authentication with integrity protection; the value "auth-conf" * indicates authentication with integrity protection and encryption. */ - /* add qop to challenge */ - if(add_to_challenge(sparams->utils, - &text->out_buf, &text->out_buf_len, &resplen, - "qop", - (uchar *)qop, TRUE) != SASL_OK) { + if(add_to_challenge(sparams->utils, &text->out_buf, &text->out_buf_len, &resplen, "qop", (uchar *)qop, TRUE) != SASL_OK) { SETERROR(sparams->utils, "internal error: add_to_challenge 3 failed"); return SASL_FAIL; } - /* * Cipheropts - list of ciphers server supports */ /* add cipher-opts to challenge; only add if there are some */ if(strcmp(cipheropts, "")!=0) { - if(add_to_challenge(sparams->utils, - &text->out_buf, &text->out_buf_len, &resplen, - "cipher", (uchar *)cipheropts, - TRUE) != SASL_OK) { - SETERROR(sparams->utils, - "internal error: add_to_challenge 4 failed"); + if(add_to_challenge(sparams->utils, &text->out_buf, &text->out_buf_len, &resplen, "cipher", (uchar *)cipheropts, TRUE) != SASL_OK) { + SETERROR(sparams->utils, "internal error: add_to_challenge 4 failed"); return SASL_FAIL; } } /* "stale" is true if a reauth failed because of a nonce timeout */ - if(stext->stale && - add_to_challenge(sparams->utils, - &text->out_buf, &text->out_buf_len, &resplen, - "stale", (uchar *)"true", FALSE) != SASL_OK) { + if(stext->stale && add_to_challenge(sparams->utils, &text->out_buf, &text->out_buf_len, &resplen, "stale", (uchar *)"true", FALSE) != SASL_OK) { SETERROR(sparams->utils, "internal error: add_to_challenge failed"); return SASL_FAIL; } - /* * maxbuf A number indicating the size of the largest buffer the server * is able to receive when using "auth-int". If this directive is @@ -2190,8 +2163,7 @@ static int digestmd5_server_mech_step2(server_context_t * stext, } else if(strcasecmp(name, "realm") == 0) { if(realm) { - SETERROR(sparams->utils, - "duplicate realm: authentication aborted"); + SETERROR(sparams->utils, "duplicate realm: authentication aborted"); result = SASL_FAIL; goto FreeAllMem; } @@ -2202,8 +2174,7 @@ static int digestmd5_server_mech_step2(server_context_t * stext, } else if(strcasecmp(name, "qop") == 0) { if(qop) { - SETERROR(sparams->utils, - "duplicate qop: authentication aborted"); + SETERROR(sparams->utils, "duplicate qop: authentication aborted"); result = SASL_FAIL; goto FreeAllMem; } @@ -2213,10 +2184,8 @@ static int digestmd5_server_mech_step2(server_context_t * stext, (text->http_mode && strcasecmp(name, "uri") == 0)) { /* per RFC 2617 */ size_t service_len; - if(digesturi) { - SETERROR(sparams->utils, - "duplicate digest-uri: authentication aborted"); + SETERROR(sparams->utils, "duplicate digest-uri: authentication aborted"); result = SASL_FAIL; goto FreeAllMem; } diff --git a/Src/OSF/gravity/src/gravity_core.c b/Src/OSF/gravity/src/gravity_core.c index 4340166cd4..bf5c8ae145 100644 --- a/Src/OSF/gravity/src/gravity_core.c +++ b/Src/OSF/gravity/src/gravity_core.c @@ -357,7 +357,7 @@ static /*inline*/ GravityValue convert_list2string(gravity_vm * vm, gravity_list return gravity_zstring_to_value(vm, buffer); } else if(v.IsBool()) - return gravity_zstring_to_value(vm, (v.n) ? "true" : "false"); + return gravity_zstring_to_value(vm, STextConst::GetBool(v.n)); else if(v.IsNull()) return gravity_zstring_to_value(vm, "null"); else if(v.IsUndefined()) diff --git a/Src/OSF/gravity/src/gravity_json.c b/Src/OSF/gravity/src/gravity_json.c index 8fcd806afb..b5b8e280da 100644 --- a/Src/OSF/gravity/src/gravity_json.c +++ b/Src/OSF/gravity/src/gravity_json.c @@ -269,7 +269,7 @@ void json_add_double(GravityJson * json, const char * key, double value) void json_add_bool(GravityJson * json, const char * key, bool bvalue) { json_check_comma(json); - const char * value = bvalue ? "true" : "false"; + const char * value = STextConst::GetBool(bvalue); json_write_key(json, key); json_write_zstr(json, value, false, (key == NULL)); } diff --git a/Src/OSF/gravity/src/gravity_opt_json.c b/Src/OSF/gravity/src/gravity_opt_json.c index 24e4820f80..3c15f20992 100644 --- a/Src/OSF/gravity/src/gravity_opt_json.c +++ b/Src/OSF/gravity/src/gravity_opt_json.c @@ -46,7 +46,7 @@ static bool JSON_stringify(gravity_vm * vm, GravityValue * args, uint16 nargs, u snprintf(vbuffer, sizeof(vbuffer), "%f", value.f); v = vbuffer; } else if(value.IsBool()) - v = value.n ? "true" : "false"; + v = STextConst::GetBool(LOGIC(value.n)); else if(value.IsInt()) { #if GRAVITY_ENABLE_INT64 snprintf(vbuffer, sizeof(vbuffer), "%" PRId64 "", value.n); diff --git a/Src/OSF/gravity/src/gravity_value.c b/Src/OSF/gravity/src/gravity_value.c index 64fbe97eba..d0f2c9be53 100644 --- a/Src/OSF/gravity/src/gravity_value.c +++ b/Src/OSF/gravity/src/gravity_value.c @@ -2016,7 +2016,7 @@ void gravity_value_dump(gravity_vm * vm, GravityValue v, char * buffer, uint16 l } else if(v.isa == GravityEnv.P_ClsBool) { type = "BOOL"; - value = v.n ? "true" : "false"; + value = STextConst::GetBool(LOGIC(v.n)); snprintf(buffer, len, "(%s) %s", type, value); value = buffer; } diff --git a/Src/OSF/harfbuzz/src/hb-debug.hh b/Src/OSF/harfbuzz/src/hb-debug.hh index 747f6ad793..dcc2e60e2e 100644 --- a/Src/OSF/harfbuzz/src/hb-debug.hh +++ b/Src/OSF/harfbuzz/src/hb-debug.hh @@ -188,17 +188,9 @@ const char * message CXX_UNUSED_PARAM, ...) /* * Printer */ -template struct hb_printer_t { - const char * print(const T&) { return "something"; } -}; - -template <> struct hb_printer_t { - const char * print(bool v) { return v ? "true" : "false"; } -}; - -template <> struct hb_printer_t { - const char * print(hb_empty_t) { return ""; } -}; +template struct hb_printer_t { const char * print(const T&) { return "something"; } }; +template <> struct hb_printer_t { const char * print(bool v) { return STextConst::GetBool(v); } }; +template <> struct hb_printer_t { const char * print(hb_empty_t) { return ""; } }; /* * Trace */ diff --git a/Src/OSF/imgui/imgui_widgets.cpp b/Src/OSF/imgui/imgui_widgets.cpp index f49f492868..a24eb875b0 100644 --- a/Src/OSF/imgui/imgui_widgets.cpp +++ b/Src/OSF/imgui/imgui_widgets.cpp @@ -6269,20 +6269,9 @@ void ImGui::PlotHistogram(const char* label, float (*values_getter)(void* data, // // - Value() // -void ImGui::Value(const char* prefix, bool b) -{ - Text("%s: %s", prefix, (b ? "true" : "false")); -} - -void ImGui::Value(const char* prefix, int v) -{ - Text("%s: %d", prefix, v); -} - -void ImGui::Value(const char* prefix, uint v) -{ - Text("%s: %d", prefix, v); -} +void ImGui::Value(const char* prefix, bool b) { Text("%s: %s", prefix, STextConst::GetBool(b)); } +void ImGui::Value(const char* prefix, int v) { Text("%s: %d", prefix, v); } +void ImGui::Value(const char* prefix, uint v) { Text("%s: %d", prefix, v); } void ImGui::Value(const char* prefix, float v, const char* float_format) { diff --git a/Src/OSF/libssh-095/src/pki.c b/Src/OSF/libssh-095/src/pki.c index 57a5e42de9..ce50d67682 100644 --- a/Src/OSF/libssh-095/src/pki.c +++ b/Src/OSF/libssh-095/src/pki.c @@ -652,7 +652,7 @@ int ssh_pki_import_privkey_base64(const char * b64_key, const char * passphrase, if(b64_key == NULL || !*b64_key) { return SSH_ERROR; } - SSH_LOG(SSH_LOG_INFO, "Trying to decode privkey passphrase=%s", passphrase ? "true" : "false"); + SSH_LOG(SSH_LOG_INFO, "Trying to decode privkey passphrase=%s", STextConst::GetBool(LOGIC(passphrase))); /* Test for OpenSSH key format first */ openssh_header = strstr(b64_key, OPENSSH_HEADER_BEGIN); if(openssh_header != NULL) { diff --git a/Src/OSF/mupdf/thirdparty/mujs/jsboolean.c b/Src/OSF/mupdf/thirdparty/mujs/jsboolean.c index f64075b3a7..50e4cb72f3 100644 --- a/Src/OSF/mupdf/thirdparty/mujs/jsboolean.c +++ b/Src/OSF/mupdf/thirdparty/mujs/jsboolean.c @@ -17,8 +17,9 @@ static void jsB_Boolean(js_State * J) static void Bp_toString(js_State * J) { js_Object * self = js_toobject(J, 0); - if(self->type != JS_CBOOLEAN) js_typeerror(J, "not a boolean"); - js_pushliteral(J, self->u.boolean ? "true" : "false"); + if(self->type != JS_CBOOLEAN) + js_typeerror(J, "not a boolean"); + js_pushliteral(J, STextConst::GetBool(self->u.boolean)); } static void Bp_valueOf(js_State * J) @@ -31,7 +32,6 @@ static void Bp_valueOf(js_State * J) void jsB_initboolean(js_State * J) { J->Boolean_prototype->u.boolean = 0; - js_pushobject(J, J->Boolean_prototype); { jsB_propf(J, "Boolean.prototype.toString", Bp_toString, 0); diff --git a/Src/OSF/mupdf/thirdparty/mujs/jsdump.c b/Src/OSF/mupdf/thirdparty/mujs/jsdump.c index d521e54ef8..4bdedd4b68 100644 --- a/Src/OSF/mupdf/thirdparty/mujs/jsdump.c +++ b/Src/OSF/mupdf/thirdparty/mujs/jsdump.c @@ -874,7 +874,7 @@ void js_dumpvalue(js_State * J, js_Value v) switch(v.type) { case JS_TUNDEFINED: printf("undefined"); break; case JS_TNULL: printf("null"); break; - case JS_TBOOLEAN: printf(v.u.boolean ? "true" : "false"); break; + case JS_TBOOLEAN: printf(STextConst::GetBool(v.u.boolean)); break; case JS_TNUMBER: printf("%.9g", v.u.number); break; case JS_TSHRSTR: printf("'%s'", v.u.shrstr); break; case JS_TLITSTR: printf("'%s'", v.u.litstr); break; diff --git a/Src/OSF/mupdf/thirdparty/mujs/json.c b/Src/OSF/mupdf/thirdparty/mujs/json.c index 05f421ce0f..ed1c19388b 100644 --- a/Src/OSF/mupdf/thirdparty/mujs/json.c +++ b/Src/OSF/mupdf/thirdparty/mujs/json.c @@ -336,13 +336,13 @@ static int fmtvalue(js_State * J, js_Buffer ** sb, const char * key, const char switch(obj->type) { case JS_CNUMBER: fmtnum(J, sb, obj->u.number); break; case JS_CSTRING: fmtstr(J, sb, obj->u.s.string); break; - case JS_CBOOLEAN: js_puts(J, sb, obj->u.boolean ? "true" : "false"); break; + case JS_CBOOLEAN: js_puts(J, sb, STextConst::GetBool(obj->u.boolean)); break; case JS_CARRAY: fmtarray(J, sb, gap, level); break; default: fmtobject(J, sb, obj, gap, level); break; } } else if(js_isboolean(J, -1)) - js_puts(J, sb, js_toboolean(J, -1) ? "true" : "false"); + js_puts(J, sb, STextConst::GetBool(js_toboolean(J, -1))); else if(js_isnumber(J, -1)) fmtnum(J, sb, js_tonumber(J, -1)); else if(js_isstring(J, -1)) @@ -353,7 +353,6 @@ static int fmtvalue(js_State * J, js_Buffer ** sb, const char * key, const char js_pop(J, 1); return 0; } - js_pop(J, 1); return 1; } diff --git a/Src/OSF/mupdf/thirdparty/mujs/jsrepr.c b/Src/OSF/mupdf/thirdparty/mujs/jsrepr.c index e99841e50d..22100230cf 100644 --- a/Src/OSF/mupdf/thirdparty/mujs/jsrepr.c +++ b/Src/OSF/mupdf/thirdparty/mujs/jsrepr.c @@ -164,7 +164,7 @@ static void reprvalue(js_State * J, js_Buffer ** sb) else if(js_isnull(J, -1)) js_puts(J, sb, "null"); else if(js_isboolean(J, -1)) - js_puts(J, sb, js_toboolean(J, -1) ? "true" : "false"); + js_puts(J, sb, STextConst::GetBool(js_toboolean(J, -1))); else if(js_isnumber(J, -1)) reprnum(J, sb, js_tonumber(J, -1)); else if(js_isstring(J, -1)) @@ -190,7 +190,7 @@ static void reprvalue(js_State * J, js_Buffer ** sb) break; case JS_CBOOLEAN: js_puts(J, sb, "(new Boolean("); - js_puts(J, sb, obj->u.boolean ? "true" : "false"); + js_puts(J, sb, STextConst::GetBool(obj->u.boolean)); js_puts(J, sb, "))"); break; case JS_CNUMBER: diff --git a/Src/OSF/mupdf/thirdparty/mujs/jsvalue.c b/Src/OSF/mupdf/thirdparty/mujs/jsvalue.c index 55dd0a26f1..97b0835197 100644 --- a/Src/OSF/mupdf/thirdparty/mujs/jsvalue.c +++ b/Src/OSF/mupdf/thirdparty/mujs/jsvalue.c @@ -268,7 +268,6 @@ const char * jsV_numbertostring(js_State * J, char buf[32], double f) *p++ = *s++; *p = 0; } - else { while(ndigits-- > 0) { *p++ = *s++; @@ -279,7 +278,6 @@ const char * jsV_numbertostring(js_State * J, char buf[32], double f) *p++ = '0'; *p = 0; } - return buf; } @@ -293,7 +291,7 @@ const char * jsV_tostring(js_State * J, js_Value * v) case JS_TSHRSTR: return v->u.shrstr; case JS_TUNDEFINED: return "undefined"; case JS_TNULL: return "null"; - case JS_TBOOLEAN: return v->u.boolean ? "true" : "false"; + case JS_TBOOLEAN: return STextConst::GetBool(v->u.boolean); case JS_TLITSTR: return v->u.litstr; case JS_TMEMSTR: return v->u.memstr->p; case JS_TNUMBER: diff --git a/Src/OSF/xapian/xapian-core/src/pretty.h b/Src/OSF/xapian/xapian-core/src/pretty.h index 53f8d318cc..e347ada0d3 100644 --- a/Src/OSF/xapian/xapian-core/src/pretty.h +++ b/Src/OSF/xapian/xapian-core/src/pretty.h @@ -173,7 +173,7 @@ template inline PrettyOStream &operator<<(PrettyOStream &ps, uch template inline PrettyOStream &operator<<(PrettyOStream &ps, bool b) { - ps.os << (b ? "true" : "false"); + ps.os << STextConst::GetBool(b); return ps; } /* diff --git a/Src/PPEquip/Crcshsrv.cpp b/Src/PPEquip/Crcshsrv.cpp index 23acd18b47..f0da8c3a20 100644 --- a/Src/PPEquip/Crcshsrv.cpp +++ b/Src/PPEquip/Crcshsrv.cpp @@ -675,7 +675,7 @@ int ACS_CRCSHSRV::Helper_ExportGoods_V10(const int mode, bool goodsIdAsArticle, p_writer->AddAttrib("marking-of-the-good", pref_barcode); p_writer->AddAttrib("price", temp_buf.Z().Cat(r_cur_entry.Price, SFMT_MONEY)); p_writer->AddAttrib("currency", "RUB"); - p_writer->AddAttrib("deleted", is_deleted ? "true" : "false"); + p_writer->AddAttrib("deleted", STextConst::GetBool(is_deleted)); if(rStoreIndex.NotEmpty()) p_writer->PutElement("shop-indices", rStoreIndex); p_writer->StartElement("department", "number", temp_buf.Z().Cat(divn)); diff --git a/Src/PPLib/Billdlg.cpp b/Src/PPLib/Billdlg.cpp index 78a9979d60..27e47b6640 100644 --- a/Src/PPLib/Billdlg.cpp +++ b/Src/PPLib/Billdlg.cpp @@ -468,7 +468,7 @@ int BillExtraDialog(const PPBillPacket * pPack, PPBillExt * pData, ObjTagList * pData->PayerID = payer_acs_id ? dlg->getCtrlLong(CTLSEL_BILLEXT_PAYER) : 0; pData->AgentID = agent_acs_id ? dlg->getCtrlLong(CTLSEL_BILLEXT_AGENT) : 0; if(!asFilt) { - dlg->getCtrlData(CTLSEL_BILLEXT_AGREEMENT, &pData->AgtBillID); // @v10.1.12 + dlg->getCtrlData(CTLSEL_BILLEXT_AGREEMENT, &pData->AgtBillID); dlg->getCtrlData(CTLSEL_BILLEXT_EXTPQUOT, &pData->ExtPriceQuotKindID); dlg->getCtrlData(CTL_BILLEXT_INVCCODE, pData->InvoiceCode); strip(pData->InvoiceCode); @@ -569,8 +569,8 @@ int BillPrelude(const PPIDArray * pOpList, uint opklFlags, PPID linkOpID, PPID * p_listbox->setDef(new StrAssocListBoxDef(op_obj.MakeOprKindList(linkOpID, pOpList, opklFlags), lbtDblClkNotify|lbtFocNotify|lbtDisposeData)); if(op_id) p_listbox->Search_(&op_id, 0, srchFirst|lbSrchByID); - dlg->SetupWordSelector(CTL_BILLPRELUDE_OPLIST, 0, 0, /*MIN_WORDSEL_SYMB*/2, WordSel_ExtraBlock::fAlwaysSearchBySubStr); // @v10.7.8 - SetupPPObjCombo(dlg, CTLSEL_BILLPRELUDE_LOC, PPOBJ_LOCATION, loc_id, OLW_WORDSELECTOR); // @v10.7.8 OLW_WORDSELECTOR + dlg->SetupWordSelector(CTL_BILLPRELUDE_OPLIST, 0, 0, /*MIN_WORDSEL_SYMB*/2, WordSel_ExtraBlock::fAlwaysSearchBySubStr); + SetupPPObjCombo(dlg, CTLSEL_BILLPRELUDE_LOC, PPOBJ_LOCATION, loc_id, OLW_WORDSELECTOR); if(loc_id && opklFlags & OPKLF_FIXEDLOC) dlg->disableCtrl(CTLSEL_BILLPRELUDE_LOC, 1); for(int valid_data = 0; !valid_data && ExecView(dlg) == cmOK;) { @@ -1042,16 +1042,13 @@ size_t PPLinkFile::Size() const { return sizeof(Id) + sizeof(Flags) + sizeof(uint32) + Ext.Len() + 1 + sizeof(uint32) + Path.Len() + 1 + sizeof(uint32) + Description.Len() + 1; - // @v10.3.2 sizeof(Ext.Len())-->sizeof(uint32) - // @v10.3.2 sizeof(Description.Len())-->sizeof(uint32) - // @v10.3.2 sizeof(Path.Len())-->sizeof(uint32) } int PPLinkFile::CopyTo(void ** ppBuf) { - const uint32 ext_len = Ext.Len() + 1; // @v10.3.2 size_t-->const uint32 - const uint32 path_len = Path.Len() + 1; // @v10.3.2 size_t-->const uint32 - const uint32 descr_len = Description.Len() + 1; // @v10.3.2 size_t-->const uint32 + const uint32 ext_len = Ext.Len() + 1; + const uint32 path_len = Path.Len() + 1; + const uint32 descr_len = Description.Len() + 1; char * p = static_cast(*ppBuf); Flags &= ~PPLNKFILE_ISNEW; memcpy(p, &Id, sizeof(Id)); @@ -1068,9 +1065,9 @@ int PPLinkFile::CopyTo(void ** ppBuf) int FASTCALL PPLinkFile::CopyFrom(const void * pBuf) { const char * p = static_cast(pBuf); - uint32 ext_len = 0; // @v10.3.2 size_t-->uint32 - uint32 path_len = 0; // @v10.3.2 size_t-->uint32 - uint32 descr_len = 0; // @v10.3.2 size_t-->uint32 + uint32 ext_len = 0; + uint32 path_len = 0; + uint32 descr_len = 0; memcpy(&Id, p, sizeof(Id)); memcpy(&Flags, p += sizeof(Id), sizeof(Flags)); memcpy(&ext_len, p += sizeof(Flags), sizeof(ext_len)); @@ -1092,13 +1089,8 @@ PPLinkFilesArray & FASTCALL PPLinkFilesArray::operator = (const PPLinkFilesArray freeAll(); StoreDir = s.StoreDir; for(uint i = 0; i < s.getCount(); i++) { - // @v10.9.4 PPLinkFile * p_flink = new PPLinkFile; - // @v10.9.4 *p_flink = *s.at(i); - // @v10.9.4 insert(p_flink); - // @v10.9.4 { PPLinkFile * p_flink = CreateNewItem(); ASSIGN_PTR(p_flink, *s.at(i)); - // } @v10.9.4 } return *this; } @@ -1253,7 +1245,6 @@ int PPLinkFilesArray::Remove(uint pos) int PPLinkFilesArray::RemoveByAry(const PPLinkFilesArray * pAry) { - // @v10.9.4 { { uint i = getCount(); if(i) do { @@ -1263,16 +1254,6 @@ int PPLinkFilesArray::RemoveByAry(const PPLinkFilesArray * pAry) Remove(i); } while(i); } - // } @v10.9.4 - /* @v10.9.4 { - for(long i = getCount(); i > 0; i--) { - uint pos = 0; - int found = 0; - PPLinkFile * p_flink = at(i-1); - if(!pAry || pAry->lsearch(p_flink, &pos, PTR_CMPFUNC(PPLinkFile)) <= 0 || p_flink->Id != pAry->at(pos)->Id) - Remove(i-1); - } - }*/ RVALUEPTR(*this, pAry); return 1; } @@ -1643,7 +1624,7 @@ int BillDialog::editLinkFiles() return ok; } -#define RESIZE_DELTA 75L // @v10.2.2 50-->75 +#define RESIZE_DELTA 75L int BillDialog::showLinkFilesList() { @@ -1967,7 +1948,7 @@ IMPL_HANDLE_EVENT(BillDialog) const PPID prev_agent_id = P_Pack->Ext.AgentID; P_Pack->Ext.IsShipped = BIN(P_Pack->Rec.Flags & BILLF_SHIPPED); P_Pack->Ext.SCardID = P_Pack->Rec.SCardID; - P_Pack->Ext.AgtBillID = P_Pack->Rec.AgtBillID; // @v10.1.12 + P_Pack->Ext.AgtBillID = P_Pack->Rec.AgtBillID; for(int r = 0; !r && BillExtraDialog(P_Pack, &P_Pack->Ext, &P_Pack->BTagL, 0) > 0;) { r = 1; if(P_Pack->Ext.AgentID != prev_agent_id) { @@ -1996,7 +1977,7 @@ IMPL_HANDLE_EVENT(BillDialog) if(r) { SETFLAG(P_Pack->Rec.Flags, BILLF_SHIPPED, P_Pack->Ext.IsShipped); P_Pack->Rec.SCardID = P_Pack->Ext.SCardID; - P_Pack->Rec.AgtBillID = P_Pack->Ext.AgtBillID; // @v10.1.12 + P_Pack->Rec.AgtBillID = P_Pack->Ext.AgtBillID; if(PayDateBase == PPClientAgreement::pdbInvoice && !P_Pack->Rec.ID) { P_Pack->SetupDefaultPayDate(PaymTerm, PayDateBase); SetupPaymDateCtrls(); @@ -2191,7 +2172,6 @@ void BillDialog::setupDebtText() if(limit > 0.0) text.CatDiv(';', 2).CatEq("Limit", limit, SFMT_MONEY); } - // @v10.9.9 { { const PPID ar_id = P_Pack->Rec.Object; if(ar_id) { @@ -2215,7 +2195,6 @@ void BillDialog::setupDebtText() } } } - // } @v10.9.9 setStaticText(CTL_BILL_ST_DEBT, text); } } @@ -2374,8 +2353,7 @@ void BillDialog::ReplyCntragntSelection(int force) } else { ss.add(0); - // @v10.6.2 PPGetWord(PPWORD_ABSENCE, 0, add_msg); - PPLoadString("absence", add_msg); // @v10.6.2 + PPLoadString("absence", add_msg); ss.add(add_msg); } p_list->addItem(i+1, ss.getBuf()); @@ -2456,7 +2434,7 @@ void BillDialog::ReplyCntragntSelection(int force) // } @v11.7.7 if(P_Pack->Rec.Object != client_id) { setCtrlLong(CTLSEL_BILL_OBJECT, P_Pack->Rec.Object); - SetupInfoText(); // @v10.9.9 + SetupInfoText(); } // @v11.7.7 { else if(do_reset_scard) @@ -2736,7 +2714,6 @@ int BillDialog::setDTS(PPBillPacket * pPack) P_BObj->SubstMemo(P_Pack); // @v11.1.12 setCtrlData(CTL_BILL_MEMO, P_Pack->Rec.Memo); setCtrlString(CTL_BILL_MEMO, P_Pack->SMemo); // @v11.1.12 - // @v10.1.12 { if(P_Pack->OpTypeID == PPOPT_AGREEMENT) { SETIFZ(P_Pack->P_Agt, new PPBill::Agreement); setCtrlData(CTL_BILL_EXPIRY, &P_Pack->P_Agt->Expiry); @@ -2744,7 +2721,6 @@ int BillDialog::setDTS(PPBillPacket * pPack) setCtrlData(CTL_BILL_MAXDSCNT, &P_Pack->P_Agt->MaxDscnt); setCtrlData(CTL_BILL_PAYPERIOD, &P_Pack->P_Agt->DefPayPeriod); } - // } @v10.1.12 setupHiddenButton(OPKF_RENT, cmRentCondition, CTL_BILL_RENTBUTTON); setupHiddenButton(OPKF_BANKING, cmPaymOrder, CTL_BILL_PAYMORDBUTTON); if(CheckOpFlags(P_Pack->Rec.OpID, OPKF_BANKING)) { @@ -2781,10 +2757,8 @@ int BillDialog::setDTS(PPBillPacket * pPack) showCtrl(CTL_BILL_EDIACKRESP, 0); showCtrl(CTL_BILL_EDIACKSTATUS, 0); showButton(cmEdiAckBill, 0); - // @v10.1.12 { if(P_Pack->OpTypeID == PPOPT_AGREEMENT) showButton(cmDetail, 0); - // } @v10.1.12 if(getCtrlView(CTL_BILL_EDIACKRESP)) { const int recadv_status = BillCore::GetRecadvStatus(P_Pack->Rec); if(recadv_status) { @@ -3356,7 +3330,7 @@ int PPObjBill::EditFreightDialog(PPBillPacket & rPack) setCtrlData(CTL_FREIGHT_NAME, Data.Name); SetupPPObjCombo(this, CTLSEL_FREIGHT_SHIP, PPOBJ_TRANSPORT, Data.ShipID, OLW_CANINSERT|OLW_LOADDEFONOPEN, reinterpret_cast(Data.TrType)); SetupPPObjCombo(this, CTLSEL_FREIGHT_CAPTAIN, PPOBJ_PERSON, Data.CaptainID, OLW_CANINSERT, reinterpret_cast(PPPRK_CAPTAIN)); - SetupPPObjCombo(this, CTLSEL_FREIGHT_CAPTAIN2, PPOBJ_PERSON, Data.Captain2ID, OLW_CANINSERT, reinterpret_cast(PPPRK_CAPTAIN)); // @v10.9.2 + SetupPPObjCombo(this, CTLSEL_FREIGHT_CAPTAIN2, PPOBJ_PERSON, Data.Captain2ID, OLW_CANINSERT, reinterpret_cast(PPPRK_CAPTAIN)); SetupPPObjCombo(this, CTLSEL_FREIGHT_AGENT, PPOBJ_PERSON, Data.AgentID, OLW_CANINSERT|OLW_LOADDEFONOPEN, reinterpret_cast(PPPRK_VESSELSAGENT)); PPIDArray worldobj_kind_list; worldobj_kind_list.addzlist(WORLDOBJ_CITY, WORLDOBJ_CITYAREA, 0L); diff --git a/Src/PPLib/Cptransf.cpp b/Src/PPLib/Cptransf.cpp index 23a6c2371f..f484885345 100644 --- a/Src/PPLib/Cptransf.cpp +++ b/Src/PPLib/Cptransf.cpp @@ -438,7 +438,7 @@ int PPObjBill::CreateModifByPUGL(PPID modifOpID, PPID * pID, PUGL * pPugl, PPID uint i; PUGL compl_pugl; PPBillPacket pack; - LongArray row_list; // @v10.5.12 + LongArray row_list; int do_set_manuf_time = 0; ObjTagItem tag_item; if(pPugl && pPugl->Slmt.Flags & PUGL::SetLotManufTimeParam::fEnable) { @@ -493,7 +493,6 @@ int PPObjBill::CreateModifByPUGL(PPID modifOpID, PPID * pID, PUGL * pPugl, PPID { row_list.clear(); THROW(pack.InsertRow(&ti, &row_list)); - // @v10.5.12 { if(do_set_manuf_time && row_list.getCount() == 1) { const uint row_pos = static_cast(row_list.get(0)); const PPTransferItem & r_ti = pack.TI(row_pos); @@ -517,7 +516,6 @@ int PPObjBill::CreateModifByPUGL(PPID modifOpID, PPID * pID, PUGL * pPugl, PPID } } } - // } @v10.5.12 } THROW(r = pack.InsertComplete(gs, acpos, &compl_pugl, PCUG_CANCEL, pGra, false/*recursive*/)); THROW(pack.ShrinkTRows()); @@ -858,7 +856,10 @@ int PPObjBill::Helper_WrOffDrft_ExpDrftRcp(WrOffDraftBlock & rBlk, int use_ta) int PPObjBill::Helper_WrOffDrft_DrftRcptModif(WrOffDraftBlock & rBlk, PPIDArray * pWrOffBills) { int ok = 1; - int incomplete = 0, processed = 0, j, r; + int incomplete = 0; + int processed = 0; + int j; + int r; PPGoodsStruc gs; LongArray rows; PPTransferItem ti; @@ -995,14 +996,15 @@ int PPObjBill::Helper_WriteOffTurnResultItem(const WrOffDraftBlock & rBlk, uint int PPObjBill::Helper_WriteOffDraft(PPID billID, const PPDraftOpEx * pWrOffParam, PPIDArray * pWrOffBills, PUGL * pDfctList, int use_ta) { int ok = -1; - int incomplete = 0, processed = 0, r; + int incomplete = 0; + int processed = 0; + int r; PPID compl_bill_id = 0; PPTransferItem ti; SString serial_buf, clb_buf; PPBillPacket * p_pack = 0; PPGoodsStruc gs; - // @v10.2.9 StringSet ss_lotxcode; // @v10.2.7 - PPLotExtCodeContainer::MarkSet lotxcode_set; // @v10.2.9 + PPLotExtCodeContainer::MarkSet lotxcode_set; LongArray rows; WrOffDraftBlock blk(pWrOffParam, pDfctList); { @@ -1162,14 +1164,10 @@ int PPObjBill::Helper_WriteOffDraft(PPID billID, const PPDraftOpEx * pWrOffParam const ObjTagList * p_org_lot_tag_list = blk.SrcDraftPack.LTagL.Get(i); THROW(p_pack->LTagL.Set(dest_pos, p_org_lot_tag_list)); } - // @v10.2.7 { { - // @v10.2.9 blk.SrcDraftPack.XcL.Get(i+1, 0, ss_lotxcode); - // @v10.2.9 p_pack->XcL.Set(dest_pos+1, &ss_lotxcode); - blk.SrcDraftPack.XcL.Get(i+1, 0, lotxcode_set); // @v10.2.9 - p_pack->XcL.Set_2(dest_pos+1, &lotxcode_set); // @v10.2.9 + blk.SrcDraftPack.XcL.Get(i+1, 0, lotxcode_set); + p_pack->XcL.Set_2(dest_pos+1, &lotxcode_set); } - // } @v10.2.7 } } p_pack->ProcessFlags |= PPBillPacket::pfForceRByBill; diff --git a/Src/PPLib/Objgs.cpp b/Src/PPLib/Objgs.cpp index 07de8a42a9..323a443ebc 100644 --- a/Src/PPLib/Objgs.cpp +++ b/Src/PPLib/Objgs.cpp @@ -2782,9 +2782,9 @@ int PPObjGoodsStruc::CheckStruct(PPIDArray * pGoodsIDs, PPIDArray * pStructIDs, CheckGsProblem * p_problem = pProblemList->CreateNewItem(); THROW_SL(p_problem); p_problem->Code = CheckGsProblem::errUnRef; - p_problem->Text = buf; - p_problem->GsID = pStruc->Rec.ID; - p_problem->RowN = -1; + p_problem->Descr = buf; + p_problem->LocIdent = pStruc->Rec.ID; + p_problem->ItemI = -1; } CALLPTRMEMB(pLogger, Log(buf)); } @@ -2796,9 +2796,9 @@ int PPObjGoodsStruc::CheckStruct(PPIDArray * pGoodsIDs, PPIDArray * pStructIDs, CheckGsProblem * p_problem = pProblemList->CreateNewItem(); THROW_SL(p_problem); p_problem->Code = CheckGsProblem::errNoNameAmbig; - p_problem->Text = buf; - p_problem->GsID = pStruc->Rec.ID; - p_problem->RowN = -1; + p_problem->Descr = buf; + p_problem->LocIdent = pStruc->Rec.ID; + p_problem->ItemI = -1; } CALLPTRMEMB(pLogger, Log(buf)); } @@ -2810,9 +2810,9 @@ int PPObjGoodsStruc::CheckStruct(PPIDArray * pGoodsIDs, PPIDArray * pStructIDs, CheckGsProblem * p_problem = pProblemList->CreateNewItem(); THROW_SL(p_problem); p_problem->Code = CheckGsProblem::errNamedEmptyName; - p_problem->Text = buf; - p_problem->GsID = pStruc->Rec.ID; - p_problem->RowN = -1; + p_problem->Descr = buf; + p_problem->LocIdent = pStruc->Rec.ID; + p_problem->ItemI = -1; } CALLPTRMEMB(pLogger, Log(buf)); } @@ -2821,11 +2821,10 @@ int PPObjGoodsStruc::CheckStruct(PPIDArray * pGoodsIDs, PPIDArray * pStructIDs, PPGoodsStrucItem * p_item = 0; PPGoodsStruc gstruc; THROW_SL(pStructIDs->add(pStruc->Rec.ID)); - for(uint i = 0; !recur && pStruc->Items.enumItems(&i, (void **)&p_item) > 0;) { // @v10.1.7 !recur + for(uint i = 0; !recur && pStruc->Items.enumItems(&i, (void **)&p_item) > 0;) { int s = 0; int g = 0; double price = 0.0; - // @v10.3.0 (never used) double sum = 0.0; gstruc.Init(); THROW(goods_obj.LoadGoodsStruc(PPGoodsStruc::Ident(p_item->GoodsID), &gstruc)); if((g = pGoodsIDs->lsearch(p_item->GoodsID)) > 0 || (s = pStructIDs->lsearch(gstruc.Rec.ID)) > 0) { @@ -2842,9 +2841,9 @@ int PPObjGoodsStruc::CheckStruct(PPIDArray * pGoodsIDs, PPIDArray * pStructIDs, CheckGsProblem * p_problem = pProblemList->CreateNewItem(); THROW_SL(p_problem); p_problem->Code = CheckGsProblem::errRecur; - p_problem->Text = buf; - p_problem->GsID = pStruc->Rec.ID; - p_problem->RowN = i; + p_problem->Descr = buf; + p_problem->LocIdent = pStruc->Rec.ID; + p_problem->ItemI = i; } CALLPTRMEMB(pLogger, Log(buf)); } diff --git a/Src/PPLib/PPACTION.CPP b/Src/PPLib/PPACTION.CPP index c90ba10252..cf3826f4e0 100644 --- a/Src/PPLib/PPACTION.CPP +++ b/Src/PPLib/PPACTION.CPP @@ -909,13 +909,13 @@ int ObjVersioningCore::SearchOid(PPObjID oid, long ver, ObjVerTbl::Rec * pRec, S k.Ver = ver; sp = spEq; } - if(search(1, &k, sp) > 0 && k.ObjType == oid.Obj && k.ObjID == oid.Id) { + if(search(1, &k, sp) > 0 && oid.IsEq(k.ObjType, k.ObjID)) { copyBufTo(pRec); if(pPackBuf) { pPackBuf->Z(); readLobData(this->Data, *pPackBuf); } - destroyLobData(this->Data); // @v10.2.11 @fix + destroyLobData(this->Data); ok = 1; } return ok; diff --git a/Src/PPLib/Ppinicfg.cpp b/Src/PPLib/Ppinicfg.cpp index a156a623e6..d4568fef99 100644 --- a/Src/PPLib/Ppinicfg.cpp +++ b/Src/PPLib/Ppinicfg.cpp @@ -1,5 +1,5 @@ // PPINICFG.CPP -// Copyright (c) A.Sobolev 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2012, 2013, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 203 +// Copyright (c) A.Sobolev 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2012, 2013, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 // @Kernel // #include @@ -768,11 +768,10 @@ int PPConfigDatabase::Open(const char * pDbPath) cfg.LogBufSize = SMEGABYTE(1); cfg.Flags |= (cfg.fLogNoSync|cfg.fLogAutoRemove); { - long db_options = BDbDatabase::oPrivate|BDbDatabase::oRecover; // @v10.7.9 BDbDatabase::oRecover + long db_options = BDbDatabase::oPrivate|BDbDatabase::oRecover; THROW_MEM(P_Db = new BDbDatabase(pDbPath, &cfg, db_options)); THROW(!!*P_Db); } - // @v10.7.9 { { SString err_file_name; SLS.GetLogPath(err_file_name); @@ -781,10 +780,9 @@ int PPConfigDatabase::Open(const char * pDbPath) err_file_name.SetLastSlash().Cat("bdberr.log"); P_Db->SetupErrLog(err_file_name); } - // } @v10.7.9 THROW_MEM(P_OT = new CObjTbl(P_Db)); THROW_MEM(P_OtT = new CObjTailTbl(P_Db)); - THROW_MEM(P_ShT = new StringHistoryTbl(P_Db)); // @v10.7.6 + THROW_MEM(P_ShT = new StringHistoryTbl(P_Db)); } CATCH ok = 0; @@ -797,7 +795,7 @@ void PPConfigDatabase::Close() { ZDELETE(P_OT); ZDELETE(P_OtT); - ZDELETE(P_ShT); // @v10.7.6 + ZDELETE(P_ShT); ZDELETE(P_Db); } diff --git a/Src/PPLib/Register.cpp b/Src/PPLib/Register.cpp index ff4753bfa9..14af35db98 100644 --- a/Src/PPLib/Register.cpp +++ b/Src/PPLib/Register.cpp @@ -772,9 +772,9 @@ bool RegisterFilt::IsEmpty() const if(pFilt) { if(pFilt->RegTypeID && rRec.RegTypeID != pFilt->RegTypeID) ok = 0; - else if(pFilt->Oid.Obj != rRec.ObjType && (pFilt->Oid.Obj || rRec.ObjType != PPOBJ_PERSON)) // @v10.0.1 + else if(pFilt->Oid.Obj != rRec.ObjType && (pFilt->Oid.Obj || rRec.ObjType != PPOBJ_PERSON)) ok = 0; - else if((pFilt->Oid.Obj && pFilt->Oid.Id) && !pFilt->Oid.IsEq(rRec.ObjType, rRec.ObjID)) + else if(pFilt->Oid.IsFullyDefined() && !pFilt->Oid.IsEq(rRec.ObjType, rRec.ObjID)) ok = 0; else if(pFilt->ExclPersonID && rRec.ObjType == PPOBJ_PERSON && rRec.ObjID == pFilt->ExclPersonID) ok = 0; @@ -798,12 +798,12 @@ int RegisterCore::SearchByObj(PPObjID oid, PPID regTypeID, RegisterTbl::Rec * pR RegisterTbl::Key1 k1; k1.ObjType = oid.Obj; k1.ObjID = oid.Id; - if(search(1, &k1, spGe) && data.ObjType == oid.Obj && data.ObjID == oid.Id) do { + if(search(1, &k1, spGe) && oid.IsEq(data.ObjType, data.ObjID)) do { if(data.RegTypeID == regTypeID) { copyBufTo(pRec); ok = 1; } - } while(ok < 0 && search(1, &k1, spNext) && data.ObjType == oid.Obj && data.ObjID == oid.Id); + } while(ok < 0 && search(1, &k1, spNext) && oid.IsEq(data.ObjType, data.ObjID)); return ok; } @@ -819,16 +819,14 @@ int RegisterCore::SearchByFilt(const RegisterFilt * pFilt, PPIDArray * pResList, } k; int idx = 0; MEMSZERO(k); - if(pFilt->Oid.Obj && pFilt->Oid.Id) { + if(pFilt->Oid.IsFullyDefined()) { RegisterArray list; _Get(pFilt->Oid.Obj, pFilt->Oid.Id, &list); for(uint i = 0; i < list.getCount(); i++) { const RegisterTbl::Rec & r_reg_rec = list.at(i); if(CheckRecForFilt(r_reg_rec, pFilt)) { CALLPTRMEMB(pResList, add(r_reg_rec.ID)); - // @v10.0.1 if(data.ObjType == PPOBJ_PERSON) { - CALLPTRMEMB(pObjList, add(r_reg_rec.ObjID)); - // @v10.0.1 } + CALLPTRMEMB(pObjList, add(r_reg_rec.ObjID)); c++; } } diff --git a/Src/PPLib/SCARD.CPP b/Src/PPLib/SCARD.CPP index ed806c3fb3..dbcbfee6fc 100644 --- a/Src/PPLib/SCARD.CPP +++ b/Src/PPLib/SCARD.CPP @@ -696,16 +696,16 @@ int SCardCore::EnumOpByCard(PPID cardID, LDATETIME * pDT, SCardOpTbl::Rec * pRec return PPDbSearchError(); } -int SCardCore::GetOpByLinkObj(PPObjID oid, TSVector & rList) // @v9.8.4 TSArray-->TSVector +int SCardCore::GetOpByLinkObj(PPObjID oid, TSVector & rList) { int ok = -1; rList.clear(); - if(oid.Obj && oid.Id) { + if(oid.IsFullyDefined()) { SCardOpTbl::Key1 k1; MEMSZERO(k1); k1.LinkObjType = oid.Obj; k1.LinkObjID = oid.Id; - if(ScOp.search(1, &k1, spGe) && ScOp.data.LinkObjType == oid.Obj && ScOp.data.LinkObjID == oid.Id) { + if(ScOp.search(1, &k1, spGe) && oid.IsEq(ScOp.data.LinkObjType, ScOp.data.LinkObjID)) { do { SCardOpTbl::Rec op_rec; ScOp.copyBufTo(&op_rec); @@ -713,7 +713,7 @@ int SCardCore::GetOpByLinkObj(PPObjID oid, TSVector & rList) // @v9.8. blk.Init(&op_rec); blk.Flags |= OpBlock::fEdit; THROW_SL(rList.insert(&blk)); - } while(ScOp.search(1, &k1, spNext) && ScOp.data.LinkObjType == oid.Obj && ScOp.data.LinkObjID == oid.Id); + } while(ScOp.search(1, &k1, spNext) && oid.IsEq(ScOp.data.LinkObjType, ScOp.data.LinkObjID)); } } CATCHZOK diff --git a/Src/PPLib/V_SYNC.CPP b/Src/PPLib/V_SYNC.CPP index b0b5bbc034..49afbbd1f1 100644 --- a/Src/PPLib/V_SYNC.CPP +++ b/Src/PPLib/V_SYNC.CPP @@ -961,8 +961,7 @@ int ViewObjSyncTab(PPObjID oid) k0.ObjType = static_cast(oid.Obj); k0.CommIdPfx = hdr_rec.CommIdPfx; k0.CommID = hdr_rec.CommID; - while(p_tbl->search(0, &k0, spGt) && p_tbl->data.ObjType == oid.Obj && - p_tbl->data.CommIdPfx == hdr_rec.CommIdPfx && p_tbl->data.CommID == hdr_rec.CommID) { + while(p_tbl->search(0, &k0, spGt) && p_tbl->data.ObjType == oid.Obj && p_tbl->data.CommIdPfx == hdr_rec.CommIdPfx && p_tbl->data.CommID == hdr_rec.CommID) { p_tbl->copyBufTo(&rec); _ObjSyncEntry entry(rec); list.insert(&entry); diff --git a/Src/PPLib/V_ccheck.cpp b/Src/PPLib/V_ccheck.cpp index 69f6311428..fc28ec2488 100644 --- a/Src/PPLib/V_ccheck.cpp +++ b/Src/PPLib/V_ccheck.cpp @@ -272,7 +272,7 @@ void PPViewCCheck::Helper_Construct() CurLine = 0; State = 0; P_InOutVATList = 0; - P_InnerIterItem = 0; // @v10.2.6 + P_InnerIterItem = 0; } PPViewCCheck::PPViewCCheck() : PPView(0, &Filt, PPVIEW_CCHECK, implDontSetupCtColumnsOnChgFilt|implUseServer, 0) @@ -551,15 +551,13 @@ class CCheckFiltDialog : public TDialog { AddClusterAssoc(CTL_CCHECKFLT_CASHORBANK, 1, 1); AddClusterAssoc(CTL_CCHECKFLT_CASHORBANK, 2, 2); SetClusterData(CTL_CCHECKFLT_CASHORBANK, cob); - // @v10.0.02 { AddClusterAssocDef(CTL_CCHECKFLT_ALTREG, 0, 0); AddClusterAssoc(CTL_CCHECKFLT_ALTREG, 1, +1); AddClusterAssoc(CTL_CCHECKFLT_ALTREG, 2, -1); SetClusterData(CTL_CCHECKFLT_ALTREG, Data.AltRegF); - // } @v10.0.02 SetupSubstGoodsCombo(this, CTLSEL_CCHECKFLT_SUBST, Data.Sgg); - SetupPersonCombo(this, CTLSEL_CCHECKFLT_CSHR, Data.CashierID, 0, eq_cfg.CshrsPsnKindID, 1); // @v10.1.8 - SetupPPObjCombo(this, CTLSEL_CCHECKFLT_CRUSER, PPOBJ_USR, Data.CreationUserID, 0, 0); // @v10.7.3 + SetupPersonCombo(this, CTLSEL_CCHECKFLT_CSHR, Data.CashierID, 0, eq_cfg.CshrsPsnKindID, 1); + SetupPPObjCombo(this, CTLSEL_CCHECKFLT_CRUSER, PPOBJ_USR, Data.CreationUserID, 0, 0); SetupCtrls(); selectCtrl(CTL_CCHECKFLT_PERIOD); return ok; @@ -594,8 +592,8 @@ class CCheckFiltDialog : public TDialog { Data.SCardID = screc.SCardID; } getCtrlData(CTLSEL_CCHECKFLT_AGENT, &Data.AgentID); - getCtrlData(CTLSEL_CCHECKFLT_CSHR, &Data.CashierID); // @v10.1.8 - getCtrlData(CTLSEL_CCHECKFLT_CRUSER, &Data.CreationUserID); // @v10.7.3 + getCtrlData(CTLSEL_CCHECKFLT_CSHR, &Data.CashierID); + getCtrlData(CTLSEL_CCHECKFLT_CRUSER, &Data.CreationUserID); getCtrlData(CTL_CCHECKFLT_TABLECODE, &Data.TableCode); Data.Grp = (CCheckFilt::Grouping)getCtrlLong(CTLSEL_CCHECKFLT_GRP); if(oneof3(Data.Grp, CCheckFilt::gAmount, CCheckFilt::gQtty, CCheckFilt::gAmountNGoods)) { @@ -614,7 +612,7 @@ class CCheckFiltDialog : public TDialog { Data.Flags |= CCheckFilt::fCashOnly; else if(temp_long == 2) Data.Flags |= CCheckFilt::fBankingOnly; - Data.AltRegF = (int8)GetClusterData(CTL_CCHECKFLT_ALTREG); // @v10.0.02 + Data.AltRegF = (int8)GetClusterData(CTL_CCHECKFLT_ALTREG); getCtrlData(CTLSEL_CCHECKFLT_SUBST, &Data.Sgg); if(ok) ASSIGN_PTR(pData, Data); @@ -710,7 +708,7 @@ void PPViewCCheck::PreprocessCheckRec(const CCheckTbl::Rec * pRec, CCheckTbl::Re rResultRec = *pRec; MEMSZERO(rExtRec); const long ff_ = Filt.Flags; - if(!(pRec->Flags & CCHKF_EXT) || (ff_ & Filt.fAvoidExt && !(Filt.HasExtFiltering() || (ff_ & CCheckFilt::fCTableStatus)))) { // @v10.2.1 + if(!(pRec->Flags & CCHKF_EXT) || (ff_ & Filt.fAvoidExt && !(Filt.HasExtFiltering() || (ff_ & CCheckFilt::fCTableStatus)))) { ; } else if(/* @seeabove pRec->Flags & CCHKF_EXT &&*/ P_CC->GetExt(pRec->ID, &rExtRec) > 0) { @@ -830,7 +828,7 @@ int FASTCALL PPViewCCheck::CheckForFilt(const CCheckTbl::Rec * pRec, const CChec if(pRec->Flags & CCHKF_EXT && pExtRec) { if(!CheckFiltID(Filt.AgentID, pExtRec->SalerID)) return 0; - if(!CheckFiltID(Filt.CreationUserID, pExtRec->CreationUserID)) // @v10.7.3 + if(!CheckFiltID(Filt.CreationUserID, pExtRec->CreationUserID)) return 0; else if(!CheckFiltID(Filt.TableCode, pExtRec->TableNo)) return 0; @@ -848,7 +846,7 @@ int FASTCALL PPViewCCheck::CheckForFilt(const CCheckTbl::Rec * pRec, const CChec else return 0; } - if(NodeIdList.GetCount() && !(Filt.Flags & CCheckFilt::fZeroSess)) { // @v10.2.7 !(Filt.Flags & CCheckFilt::fZeroSess) + if(NodeIdList.GetCount() && !(Filt.Flags & CCheckFilt::fZeroSess)) { long cn_id = 0; // // Если условия фильтрации требуют отображения junk или потерянных junk-чеков, @@ -1075,7 +1073,7 @@ int PPViewCCheck::ProcessCheckRec(const CCheckTbl::Rec * pRec, BExtInsert * pBei return ok; } -struct CCheckGrpItem { // @flat @size=104 // @v10.2.6 72-->104 +struct CCheckGrpItem { // @flat @size=104 LDATE Dt; LTIME Tm; long CashID; @@ -1089,7 +1087,7 @@ struct CCheckGrpItem { // @flat @size=104 // @v10.2.6 72-->104 double BnkAmt; double CrdCardAmt; double Qtty; - char Serial[32]; // @v10.2.6 + char Serial[32]; }; IMPL_CMPFUNC(CCheckGrpItem, p1, p2) @@ -1131,7 +1129,7 @@ int CCheckGrpCache::SearchItem(const CCheckGrpItem * pKey, CCheckGrpItem * pItem k1.CashID = pKey->CashID; k1.SCardID = pKey->SCardID; k1.GoodsID = pKey->GoodsID; - STRNSCPY(k1.Serial, pKey->Serial); // @v10.2.6 + STRNSCPY(k1.Serial, pKey->Serial); if(P_Tbl->search(1, &k1, spEq)) { if(pItem) { const TempCCheckGrpTbl::Rec & r_data = P_Tbl->data; @@ -1148,7 +1146,7 @@ int CCheckGrpCache::SearchItem(const CCheckGrpItem * pKey, CCheckGrpItem * pItem pItem->BnkAmt = r_data.BnkAmt; pItem->CrdCardAmt = r_data.CrdCardAmt; pItem->Qtty = r_data.Qtty; - STRNSCPY(pItem->Serial, r_data.Serial); // @v10.2.6 + STRNSCPY(pItem->Serial, r_data.Serial); } return 1; } @@ -1172,7 +1170,7 @@ int CCheckGrpCache::FlashItem(const CCheckGrpItem * pItem) rec.BnkAmt = pItem->BnkAmt; rec.CrdCardAmt = pItem->CrdCardAmt; rec.Qtty = pItem->Qtty; - STRNSCPY(rec.Serial, pItem->Serial); // @v10.2.6 + STRNSCPY(rec.Serial, pItem->Serial); if(SearchItem(pItem, 0) > 0) { rec.ID__ = P_Tbl->data.ID__; ok = P_Tbl->updateRecBuf(&rec) ? 1 : PPSetErrorDB(); @@ -1243,7 +1241,9 @@ bool PPViewCCheck::IsTempTblNeeded() const int PPViewCCheck::Init_(const PPBaseFilt * pFilt) { int ok = 1, r; - SString temp_buf, name_buf, goods_name; + SString temp_buf; + SString name_buf; + SString goods_name; PPIDArray temp_list; CCheckCore * p_cct = P_CC; PPObjLocation loc_obj; @@ -1254,13 +1254,13 @@ int PPViewCCheck::Init_(const PPBaseFilt * pFilt) Filt.Period.Actualize(ZERODATE); THROW(ObjRts.AdjustCSessPeriod(Filt.Period, 0)); ZDELETE(P_TmpGrpTbl); - ZDELETE(P_InnerIterItem); // @v10.2.6 + ZDELETE(P_InnerIterItem); CcIdList.Set(0); SCardList.Set(0); SessIdList.Set(0); NodeIdList.Set(0); GoodsList.Clear(); - Problems.clear(); // @v10.8.8 + Problems.clear(); State &= ~(stUseGoodsList|stSkipUnprinted); Gsl.Init(1, 0); ZDELETE(P_InOutVATList); @@ -2445,14 +2445,14 @@ DBQuery * PPViewCCheck::CreateBrowserQuery(uint * pBrwId, SString * pSubTitle) } PPDbqFuncPool::InitFunc2Arg(dbe_addr_phone, PPDbqFuncPool::IdAddrExField, p_ext->AddrID, dbconst((long)LOCEXSTR_PHONE)); PPDbqFuncPool::InitFunc2Arg(dbe_addr, PPDbqFuncPool::IdAddrExField, p_ext->AddrID, dbconst((long)LOCEXSTR_SHORTADDR)); - p_q->addField(p_ext->StartOrdDtm); // #19 // @v10.1.11 #++ - p_q->addField(dbe_addr_phone); // #20 // @v10.1.11 #++ - p_q->addField(dbe_addr_city); // #21 // @v10.1.11 #++ - p_q->addField(dbe_addr); // #22 // @v10.1.11 #++ + p_q->addField(p_ext->StartOrdDtm); // #19 + p_q->addField(dbe_addr_phone); // #20 + p_q->addField(dbe_addr_city); // #21 + p_q->addField(dbe_addr); // #22 } else if(Filt.Flags & CCheckFilt::fOrderOnly) { - p_q->addField(p_ext->StartOrdDtm); // #19 // @v10.1.11 #++ - p_q->addField(p_ext->EndOrdDtm); // #20 // @v10.1.11 #++ + p_q->addField(p_ext->StartOrdDtm); // #19 + p_q->addField(p_ext->EndOrdDtm); // #20 } dbq = & (*dbq && (p_ext->CheckID += cq->ID)); p_q->from(cq, p_ext, 0L); @@ -2477,27 +2477,25 @@ DBQuery * PPViewCCheck::CreateBrowserQuery(uint * pBrwId, SString * pSubTitle) t->ID, // #0 t->Dt, // #1 t->Tm, // #2 - // @v10.1.10 t->CashID, // #3 - t->PosNodeID, // #3 // @v10.1.11 - // @v10.1.11 dbe_posnode, // #3 @v10.1.10 + t->PosNodeID, // #3 t->Flags, // #4 t->Code, // #5 t->Amount, // #6 dbe_sc_code, // #7 t->Discount, // #8 - dbe_posnode, // #9 // @v10.1.11 - dbe_psn, // #10 // @v10.1.11 #++ - dbe_scowner_name, // #11 // @v10.1.11 #++ + dbe_posnode, // #9 + dbe_psn, // #10 + dbe_scowner_name, // #11 0L); if(State & stHasExt) { SETIFZ(p_ext, new CCheckExtTbl); PPDbqFuncPool::InitObjNameFunc(dbe_saler, PPDbqFuncPool::IdObjNameAr, p_ext->SalerID); p_add_paym = &(p_ext->AddPaym_unused / 100.0); - p_q->addField(dbe_saler); // #12 // @v10.1.11 #++ - p_q->addField(p_ext->TableNo); // #13 // @v10.1.11 #++ - p_q->addField(p_ext->GuestCount); // #14 // @v10.1.11 #++ - p_q->addField(*p_add_paym); // #15 // @v10.1.11 #++ - p_q->addField(p_ext->Memo); // #16 // @v10.1.11 #++ + p_q->addField(dbe_saler); // #12 + p_q->addField(p_ext->TableNo); // #13 + p_q->addField(p_ext->GuestCount); // #14 + p_q->addField(*p_add_paym); // #15 + p_q->addField(p_ext->Memo); // #16 if(Filt.Flags & CCheckFilt::fDlvrOnly || Filt.DlvrAddrID) { { dbe_addr_city.init(); @@ -2506,14 +2504,14 @@ DBQuery * PPViewCCheck::CreateBrowserQuery(uint * pBrwId, SString * pSubTitle) } PPDbqFuncPool::InitFunc2Arg(dbe_addr_phone, PPDbqFuncPool::IdAddrExField, p_ext->AddrID, dbconst((long)LOCEXSTR_PHONE)); PPDbqFuncPool::InitFunc2Arg(dbe_addr, PPDbqFuncPool::IdAddrExField, p_ext->AddrID, dbconst((long)LOCEXSTR_SHORTADDR)); - p_q->addField(p_ext->StartOrdDtm); // #17 // @v10.1.11 #++ - p_q->addField(dbe_addr_phone); // #18 // @v10.1.11 #++ - p_q->addField(dbe_addr_city); // #19 // @v10.1.11 #++ - p_q->addField(dbe_addr); // #20 // @v10.1.11 #++ + p_q->addField(p_ext->StartOrdDtm); // #17 + p_q->addField(dbe_addr_phone); // #18 + p_q->addField(dbe_addr_city); // #19 + p_q->addField(dbe_addr); // #20 } else if(Filt.Flags & CCheckFilt::fOrderOnly) { - p_q->addField(p_ext->StartOrdDtm); // #17 // @v10.1.11 #++ - p_q->addField(p_ext->EndOrdDtm); // #18 // @v10.1.11 #++ + p_q->addField(p_ext->StartOrdDtm); // #17 + p_q->addField(p_ext->EndOrdDtm); // #18 } } if(Filt.Flags & (CCheckFilt::fCashOnly|CCheckFilt::fBankingOnly)) diff --git a/Src/PPLib/V_gdsopr.cpp b/Src/PPLib/V_gdsopr.cpp index 35c061bea6..792028e402 100644 --- a/Src/PPLib/V_gdsopr.cpp +++ b/Src/PPLib/V_gdsopr.cpp @@ -2210,11 +2210,10 @@ int PPViewGoodsOpAnalyze::CreateTempTable(double * pUfpFactors) BillTbl::Rec bill_rec; BillTbl::Key2 k2; BillCore * p_bt = P_BObj->P_Tbl; - //PPIDArray ord_list; PPIDArray local_ord_list; // Заказы, к которым привязан конкретный док отгрузки - //PPIDArray shipm_list; PPIDArray seen_ord_lot_list; // Идентификаторы лотов заказов, которые мы уже учли в отчете PPIDArray temp_list; + PPIDArray goods_list; MpDBlk.Z(); { // Продажи @@ -2233,6 +2232,20 @@ int PPViewGoodsOpAnalyze::CreateTempTable(double * pUfpFactors) MpDBlk.OrdList.add(&temp_list); } } + if(cfg.ReturnOpID) { + // Возвраты + BExtQuery q(p_bt, 2); + q.select(p_bt->ID, p_bt->Code, p_bt->Dt, p_bt->LocID, p_bt->OpID, p_bt->Object, p_bt->Object2, p_bt->Flags, + p_bt->LinkBillID, p_bt->Amount, 0).where(p_bt->OpID == cfg.ReturnOpID && daterange(p_bt->Dt, &Filt.Period) && p_bt->EdiOp == PPEDIOP_MRKTPLC_RETURN); + MEMSZERO(k2); + k2.OpID = cfg.ReturnOpID; + k2.Dt = Filt.Period.low; + for(q.initIteration(false, &k2, spGe); q.nextIteration() > 0;) { + THROW(PPCheckUserBreak()); + p_bt->copyBufTo(&bill_rec); + MpDBlk.RetList.add(bill_rec.ID); + } + } { // Заказы BExtQuery q(p_bt, 2); @@ -2248,19 +2261,19 @@ int PPViewGoodsOpAnalyze::CreateTempTable(double * pUfpFactors) } } MpDBlk.ShipmList.sortAndUndup(); + MpDBlk.RetList.sortAndUndup(); // @v12.1.11 MpDBlk.OrdList.sortAndUndup(); for(uint slidx = 0; slidx < MpDBlk.ShipmList.getCount(); slidx++) { const PPID bill_id = MpDBlk.ShipmList.get(slidx); PPBillPacket bpack; if(P_BObj->ExtractPacket(bill_id, &bpack) > 0) { bpack.GetOrderList(local_ord_list); - //int PPViewGoodsOpAnalyze::PutBillToTempTable(PPBillPacket * pPack, double part, int sign, const PPIDArray * pSupplBillList) { long subst_bill_val = 0; - PPIDArray goods_list; GoaAddingBlock blk; double part = 1.0; int sign = 0; + goods_list.Z(); InitAddingBlock(&bpack, part, sign, &blk); if(!!Filt.Sgb) P_BObj->Subst(&bpack, &subst_bill_val, &Bsp); @@ -2349,71 +2362,138 @@ int PPViewGoodsOpAnalyze::CreateTempTable(double * pUfpFactors) } } // + // Цикл по возвратам от покупателей // + // + for(uint rlidx = 0; rlidx < MpDBlk.RetList.getCount(); rlidx++) { + const PPID bill_id = MpDBlk.RetList.get(rlidx); + PPBillPacket bpack; + if(P_BObj->ExtractPacket(bill_id, &bpack) > 0) { + long subst_bill_val = 0; + GoaAddingBlock blk; + double part = 1.0; + int sign = 0; + goods_list.Z(); + InitAddingBlock(&bpack, part, sign, &blk); + if(!!Filt.Sgb) + P_BObj->Subst(&bpack, &subst_bill_val, &Bsp); + for(uint tiidx = 0; tiidx < bpack.GetTCount(); tiidx++) { + const PPTransferItem & r_ti = bpack.ConstTI(tiidx); + int r; + { + PPTransferItem _ret_ti(r_ti); + _ret_ti.Quantity_ = 0.0; + _ret_ti.Cost = 0.0; + _ret_ti.Price = 0.0; + _ret_ti.Discount = 0.0; + THROW(PPCheckUserBreak()); + THROW(r = PreprocessTi(&_ret_ti, p_suppl_bill_list, subst_bill_val, &blk)); // blk.Sign вероятно требует уточнения // + if(r > 0) { + const double ti_qtty = fabs(r_ti.Quantity_); + PROFILE_S(THROW(AddItem(blk)), "AddItem()"); // ogMarketplaceSalesAnalyze + { + IndicatorVector * p_iv = GetIndicatorEntry(blk); + if(!p_iv) { + IndicatorVector * p_new_iv = IndicatorList.CreateNewItem(); + p_new_iv->GoodsID = blk.FinalGoodsID; + p_new_iv->ArID = blk.ArID; + p_new_iv->LocID = blk.LocID; + p_new_iv->Sign = blk.Sign; + p_iv = p_new_iv; + } + const double ti_part = r_ti.CalcAmount() / bpack.Rec.Amount; + p_iv->Add(PPBZSI_SALERETCOUNT, 1.0); + p_iv->Add(PPBZSI_SALERETQTTY, ti_qtty); + p_iv->Add(PPBZSI_SALERETCOST, ti_qtty * r_ti.Cost); + { + const double a = bpack.Amounts.Get(PPAMT_FREIGHT, 0L); + if(a != 0.0) + p_iv->Add(PPBZSI_FREIGHT, a * ti_part); + } + { + const double a = -fabs(bpack.Amounts.Get(PPAMT_MP_SELLERPART, 0L)); + if(a != 0.0) + p_iv->Add(PPBZSI_MPSELLERSPART, a * ti_part); + } + { + const double a = bpack.Amounts.Get(PPAMT_MP_COMMISSION, 0L); + if(a != 0.0) + p_iv->Add(PPBZSI_MPCOMMISSION, a * ti_part); + } + { + const double a = bpack.Amounts.Get(PPAMT_MP_ACQUIRING, 0L); + if(a != 0.0) + p_iv->Add(PPBZSI_MPACQUIRING, a * ti_part); + } + } + } + } + } + } + } + // // Цикл по заказам (которые не были обработаны в цикле обзора продаж) // for(uint olidx = 0; olidx < MpDBlk.OrdList.getCount(); olidx++) { const PPID bill_id = MpDBlk.OrdList.get(olidx); PPBillPacket bpack; if(P_BObj->ExtractPacket(bill_id, &bpack) > 0) { - { - long subst_bill_val = 0; - PPIDArray goods_list; - GoaAddingBlock blk; - double part = 1.0; - int sign = 0; - InitAddingBlock(&bpack, part, sign, &blk); - if(!!Filt.Sgb) - P_BObj->Subst(&bpack, &subst_bill_val, &Bsp); - for(uint tiidx = 0; tiidx < bpack.GetTCount(); tiidx++) { - const PPTransferItem & r_ti = bpack.ConstTI(tiidx); - if(!seen_ord_lot_list.lsearch(r_ti.LotID)) { - int r; - PPTransferItem _ord_ti(r_ti); - _ord_ti.Quantity_ = 0.0; - _ord_ti.Cost = 0.0; - _ord_ti.Price = 0.0; - _ord_ti.Discount = 0.0; - THROW(PPCheckUserBreak()); - THROW(r = PreprocessTi(&_ord_ti, p_suppl_bill_list, subst_bill_val, &blk)); - if(r > 0) { - PROFILE_S(THROW(AddItem(blk)), "AddItem()"); // ogMarketplaceSalesAnalyze - { - IndicatorVector * p_iv = GetIndicatorEntry(blk); - if(!p_iv) { - IndicatorVector * p_new_iv = IndicatorList.CreateNewItem(); - p_new_iv->GoodsID = blk.FinalGoodsID; - p_new_iv->ArID = blk.ArID; - p_new_iv->LocID = blk.LocID; - p_new_iv->Sign = blk.Sign; - p_iv = p_new_iv; - } - const double ti_part = r_ti.CalcAmount() / bpack.Rec.Amount; - p_iv->Add(PPBZSI_ORDCOUNT, 1.0); - p_iv->Add(PPBZSI_ORDQTTY, fabs(r_ti.Quantity_)); - p_iv->Add(PPBZSI_MPAMT_ORDPRICE, fabs(fabs(r_ti.Quantity_)) * r_ti.NetPrice()); - p_iv->Add(PPBZSI_MPAMT_ORDSELLERPRICE, fabs(fabs(r_ti.Quantity_)) * r_ti.NetPrice()); - if(bpack.Rec.Flags2 & BILLF2_DECLINED) { - p_iv->Add(PPBZSI_ORDCANCELLEDCOUNT, 1.0); - p_iv->Add(PPBZSI_ORDCANCELLEDQTTY, fabs(r_ti.Quantity_)); - MpDBlk.CancelledOrdList.add(bpack.Rec.ID); - } - /* - if(local_ord_list.getCount()) { - if(r_ti.Flags & PPTFR_ONORDER && r_ti.OrdLotID && !seen_ord_lot_list.lsearch(r_ti.OrdLotID)) { - uint sh_lot_pos = 0; - if(bpack.SearchShLot(r_ti.OrdLotID, &sh_lot_pos)) { - ReceiptTbl::Rec lot_rec; - if(P_BObj->trfr->Rcpt.Search(r_ti.OrdLotID, &lot_rec) > 0) { - p_iv->Add(PPBZSI_ORDCOUNT, 1.0); - p_iv->Add(PPBZSI_ORDQTTY, fabs(lot_rec.Quantity)); - long ord_shipm_delay = diffdate(bpack.Rec.Dt, lot_rec.Dt); - p_iv->Add(PPBZSI_ORDSHIPMDELAYDAYS, static_cast(ord_shipm_delay)); - seen_ord_lot_list.add(lot_rec.ID); - } + long subst_bill_val = 0; + GoaAddingBlock blk; + double part = 1.0; + int sign = 0; + goods_list.Z(); + InitAddingBlock(&bpack, part, sign, &blk); + if(!!Filt.Sgb) + P_BObj->Subst(&bpack, &subst_bill_val, &Bsp); + for(uint tiidx = 0; tiidx < bpack.GetTCount(); tiidx++) { + const PPTransferItem & r_ti = bpack.ConstTI(tiidx); + if(!seen_ord_lot_list.lsearch(r_ti.LotID)) { + int r; + PPTransferItem _ord_ti(r_ti); + _ord_ti.Quantity_ = 0.0; + _ord_ti.Cost = 0.0; + _ord_ti.Price = 0.0; + _ord_ti.Discount = 0.0; + THROW(PPCheckUserBreak()); + THROW(r = PreprocessTi(&_ord_ti, p_suppl_bill_list, subst_bill_val, &blk)); + if(r > 0) { + PROFILE_S(THROW(AddItem(blk)), "AddItem()"); // ogMarketplaceSalesAnalyze + { + IndicatorVector * p_iv = GetIndicatorEntry(blk); + if(!p_iv) { + IndicatorVector * p_new_iv = IndicatorList.CreateNewItem(); + p_new_iv->GoodsID = blk.FinalGoodsID; + p_new_iv->ArID = blk.ArID; + p_new_iv->LocID = blk.LocID; + p_new_iv->Sign = blk.Sign; + p_iv = p_new_iv; + } + const double ti_part = r_ti.CalcAmount() / bpack.Rec.Amount; + p_iv->Add(PPBZSI_ORDCOUNT, 1.0); + p_iv->Add(PPBZSI_ORDQTTY, fabs(r_ti.Quantity_)); + p_iv->Add(PPBZSI_MPAMT_ORDPRICE, fabs(fabs(r_ti.Quantity_)) * r_ti.NetPrice()); + p_iv->Add(PPBZSI_MPAMT_ORDSELLERPRICE, fabs(fabs(r_ti.Quantity_)) * r_ti.NetPrice()); + if(bpack.Rec.Flags2 & BILLF2_DECLINED) { + p_iv->Add(PPBZSI_ORDCANCELLEDCOUNT, 1.0); + p_iv->Add(PPBZSI_ORDCANCELLEDQTTY, fabs(r_ti.Quantity_)); + MpDBlk.CancelledOrdList.add(bpack.Rec.ID); + } + /* + if(local_ord_list.getCount()) { + if(r_ti.Flags & PPTFR_ONORDER && r_ti.OrdLotID && !seen_ord_lot_list.lsearch(r_ti.OrdLotID)) { + uint sh_lot_pos = 0; + if(bpack.SearchShLot(r_ti.OrdLotID, &sh_lot_pos)) { + ReceiptTbl::Rec lot_rec; + if(P_BObj->trfr->Rcpt.Search(r_ti.OrdLotID, &lot_rec) > 0) { + p_iv->Add(PPBZSI_ORDCOUNT, 1.0); + p_iv->Add(PPBZSI_ORDQTTY, fabs(lot_rec.Quantity)); + long ord_shipm_delay = diffdate(bpack.Rec.Dt, lot_rec.Dt); + p_iv->Add(PPBZSI_ORDSHIPMDELAYDAYS, static_cast(ord_shipm_delay)); + seen_ord_lot_list.add(lot_rec.ID); } } - }*/ - } + } + }*/ } } } @@ -3597,6 +3677,29 @@ int PPViewGoodsOpAnalyze::ViewDetail(PPViewBrowser * pBrw, PPID rowIdent, PPID l break; case 1111: // PPBZSI_ORDSHIPMDELAYDAYSAVG break; + case 121: // PPBZSI_SALERETCOUNT + case 122: // PPBZSI_SALERETQTTY + case 123: // PPBZSI_SALERETCOST + if(MpDBlk.RetList.getCount()) { + bool skip = false; + BillFilt bill_filt; + if(goodsID) { + PPIDArray list; + P_BObj->LimitBillListByGoods(MpDBlk.RetList, labs(goodsID), list); + if(list.getCount()) + bill_filt.List.Set(&list); + else + skip = true; + } + else + bill_filt.List.Set(&MpDBlk.RetList); + if(!skip) { + bill_filt.Bbt = bbtGoodsBills; + BillFilt::FiltExtraParam p(0, bill_filt.Bbt); + PPView::Execute(PPVIEW_BILL, &bill_filt, GetModelessStatus(), &p); + } + } + break; } } } @@ -4042,6 +4145,27 @@ int PPViewGoodsOpAnalyze::_GetDataForBrowser(SBrowserDataProcBlock * pBlk) ok = 1; } break; + case 121: // PPBZSI_SALERETCOUNT + if(p_ind) { + p_ind->Get(PPBZSI_SALERETCOUNT, &value); + pBlk->Set(value); + ok = 1; + } + break; + case 122: // PPBZSI_SALERETQTTY + if(p_ind) { + p_ind->Get(PPBZSI_SALERETQTTY, &value); + pBlk->Set(value); + ok = 1; + } + break; + case 123: // PPBZSI_SALERETCOST + if(p_ind) { + p_ind->Get(PPBZSI_SALERETCOST, &value); + pBlk->Set(value); + ok = 1; + } + break; } } } @@ -4060,13 +4184,13 @@ void PPViewGoodsOpAnalyze::PreprocessBrowser(PPViewBrowser * pBrw) assert(Filt.OpGrpID == GoodsOpAnalyzeFilt::ogMarketplaceSalesAnalyze); int mp_col = -1; uint column_idx = 1; - { + if(MpDBlk.OrdList.getCount()) { //PPLoadString("ware", temp_buf); //pBrw->insertColumn(-1, "OrdCount", 101, T_INT32, 0, BCO_USERPROC); - pBrw->InsColumn(-1, PPLoadStringS("qtty", temp_buf), 102, T_DOUBLE, MKSFMTD(0, 3, NMBF_NOTRAILZ), BCO_USERPROC); + pBrw->InsColumn(-1, "@qtty", 102, T_DOUBLE, MKSFMTD(0, 3, NMBF_NOTRAILZ), BCO_USERPROC); //pBrw->insertColumn(-1, "SaleCount", 103, T_INT32, 0, BCO_USERPROC); - pBrw->InsColumn(-1, "Client's price", 112, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); - pBrw->InsColumn(-1, "Seller's price", 113, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); + pBrw->InsColumn(-1, "@sum_clientprice", 112, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); + pBrw->InsColumn(-1, "@sum_sellerprice", 113, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); { BroGroup grp; grp.First = column_idx; @@ -4077,8 +4201,8 @@ void PPViewGoodsOpAnalyze::PreprocessBrowser(PPViewBrowser * pBrw) column_idx += grp.Count; } } - { - pBrw->insertColumn(-1, PPLoadStringS("qtty", temp_buf), 106, T_DOUBLE, MKSFMTD(0, 3, NMBF_NOTRAILZ), BCO_USERPROC); + if(MpDBlk.CancelledOrdList.getCount()) { + pBrw->insertColumn(-1, "@qtty", 106, T_DOUBLE, MKSFMTD(0, 3, NMBF_NOTRAILZ), BCO_USERPROC); pBrw->insertColumn(-1, "Rate", 1105, T_DOUBLE, MKSFMTD(0, 4, 0), BCO_USERPROC); { BroGroup grp; @@ -4090,12 +4214,11 @@ void PPViewGoodsOpAnalyze::PreprocessBrowser(PPViewBrowser * pBrw) column_idx += grp.Count; } } - { - pBrw->InsColumn(-1, PPLoadStringS("qtty", temp_buf), 104, T_DOUBLE, MKSFMTD(0, 3, NMBF_NOTRAILZ), BCO_USERPROC); - pBrw->InsColumn(-1, "Cost", 116, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); - //pBrw->insertColumn(-1, "CancellationCount", 105, T_INT32, 0, BCO_USERPROC); - pBrw->InsColumn(-1, "Client's price", 114, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); - pBrw->InsColumn(-1, "Seller's price", 115, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); + if(MpDBlk.ShipmList.getCount()) { + pBrw->InsColumn(-1, "@qtty", 104, T_DOUBLE, MKSFMTD(0, 3, NMBF_NOTRAILZ), BCO_USERPROC); + pBrw->InsColumn(-1, "@sumcost", 116, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); + pBrw->InsColumn(-1, "@sum_clientprice", 114, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); + pBrw->InsColumn(-1, "@sum_sellerprice", 115, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); { BroGroup grp; grp.First = column_idx; @@ -4106,12 +4229,26 @@ void PPViewGoodsOpAnalyze::PreprocessBrowser(PPViewBrowser * pBrw) column_idx += grp.Count; } } + if(MpDBlk.RetList.getCount()) { // @v12.1.11 + pBrw->InsColumn(-1, "@qtty", 122, T_DOUBLE, MKSFMTD(0, 3, NMBF_NOTRAILZ), BCO_USERPROC); + pBrw->InsColumn(-1, "@sumcost", 123, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); + + { + BroGroup grp; + grp.First = column_idx; + grp.Count = 2; + grp.Height = 1; + grp.P_Text = newStr(PPLoadStringS("returnfrombuyer_pl", temp_buf)); + p_def->AddColumnGroup(&grp); + column_idx += grp.Count; + } + } pBrw->insertColumn(-1, "Seller's earnings", 107, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); column_idx += 1; { - pBrw->insertColumn(-1, "Commission", 108, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); - pBrw->insertColumn(-1, "Acqiring", 109, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); - pBrw->insertColumn(-1, "Freight", 117, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); + pBrw->insertColumn(-1, "@commission_s", 108, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); + pBrw->insertColumn(-1, "@bankacquiring", 109, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); + pBrw->insertColumn(-1, "@freight", 117, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); { BroGroup grp; grp.First = column_idx; @@ -4122,7 +4259,7 @@ void PPViewGoodsOpAnalyze::PreprocessBrowser(PPViewBrowser * pBrw) column_idx += grp.Count; } } - pBrw->insertColumn(-1, PPLoadStringS("profit", temp_buf), 1116, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); + pBrw->insertColumn(-1, "@profit", 1116, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); pBrw->insertColumn(-1, "Shipm days", 1111, T_DOUBLE, SFMT_MONEY, BCO_USERPROC); CALLPTRMEMB(pBrw, SetDefUserProc(PPViewGoodsOpAnalyze::GetDataForBrowser, this)); } @@ -4856,11 +4993,9 @@ int PPViewGoodsOpAnalyze::Print(const void *) else if(Filt.Flags & GoodsOpAnalyzeFilt::fUnprofitableGoods) rpt_id = REPORT_GOA_LOSS; else if(no_cost) - rpt_id = (Filt.Flags & GoodsOpAnalyzeFilt::fCalcRest) ? - REPORT_GOODSOPRONEPRICEREST : REPORT_GOODSOPRONEPRICE; + rpt_id = (Filt.Flags & GoodsOpAnalyzeFilt::fCalcRest) ? REPORT_GOODSOPRONEPRICEREST : REPORT_GOODSOPRONEPRICE; else - rpt_id = (Filt.Flags & GoodsOpAnalyzeFilt::fCalcRest) ? - REPORT_GOODSOPRPRICEREST : REPORT_GOODSOPRPRICE; + rpt_id = (Filt.Flags & GoodsOpAnalyzeFilt::fCalcRest) ? REPORT_GOODSOPRPRICEREST : REPORT_GOODSOPRPRICE; } } if(oneof4(ord, OrdByQtty, OrdByCostSum, OrdByPriceSum, OrdByIncome) || Filt.Sgg) @@ -4876,7 +5011,7 @@ int PPViewGoodsOpAnalyze::Print(const void *) else { uint sel = 0; ok = SelectorDialog(DLG_ABCANLZPRN, CTL_ABCANLZPRN_WHAT, &sel); - if(ok > 0) + if(ok > 0) { if(sel == 1) { Filt.ABCAnlzGroup = 2; rpt_id = REPORT_GOODSOPRABC; @@ -4885,8 +5020,9 @@ int PPViewGoodsOpAnalyze::Print(const void *) Filt.ABCAnlzGroup = 1; rpt_id = REPORT_GOODSOPRABCGRP; } - else - ok = -1; + } + else + ok = -1; } if(ok > 0) { PPReportEnv env; @@ -5079,4 +5215,3 @@ int PPALDD_GoodsOpAnlzCmp::NextIteration(PPIterID iterId) } void PPALDD_GoodsOpAnlzCmp::Destroy() { DESTROY_PPVIEW_ALDD(GoodsOpAnalyze); } - diff --git a/Src/PPLib/V_sysj.cpp b/Src/PPLib/V_sysj.cpp index 05698188d0..2725eba0ac 100644 --- a/Src/PPLib/V_sysj.cpp +++ b/Src/PPLib/V_sysj.cpp @@ -1394,7 +1394,7 @@ int PPViewGtaJournal::InitIteration() P_IterQuery->selectAll(); } else { - if(Filt.Oi.Obj && Filt.Oi.Id) + if(Filt.Oi.IsFullyDefined()) idx = 3; else idx = 0; @@ -1531,7 +1531,7 @@ DBQuery * PPViewGtaJournal::CreateBrowserQuery(uint * pBrwId, SString * pSubTitl dbe_objtitle, // #7 0L).from(t, 0L); q->where(*dbq); - if(Filt.Oi.Obj && Filt.Oi.Id) + if(Filt.Oi.IsFullyDefined()) q->orderBy(t->ObjType, t->ObjID, t->Dt, 0L); else q->orderBy(t->Dt, t->Tm, 0L); diff --git a/Src/PPLib/bitmbrow.cpp b/Src/PPLib/bitmbrow.cpp index 6ee5c21490..0602febe9d 100644 --- a/Src/PPLib/bitmbrow.cpp +++ b/Src/PPLib/bitmbrow.cpp @@ -34,6 +34,7 @@ class BillItemBrowser : public BrowserWindow { void Init() { memzero(PTR8(this)+sizeof(Text), sizeof(*this)-sizeof(Text)); + Text.Z(); // @v12.1.11 } enum { fHasIndepPhQtty = 0x0001, // По крайней мере одна строка имеет признак PPTFR_INDEPPHQTTY diff --git a/Src/PPLib/chzn.cpp b/Src/PPLib/chzn.cpp index c15009886f..f25c198bd2 100644 --- a/Src/PPLib/chzn.cpp +++ b/Src/PPLib/chzn.cpp @@ -4399,6 +4399,25 @@ class CheckChZnMarkDialog : public TDialog { rInfoBuf.CRB().Tab().Cat("InnerUnitCount").CatDiv(':', 2).Cat(p_result_cle->InnerUnitCount); rInfoBuf.CRB().Tab().Cat("SoldUnitCount").CatDiv(':', 2).Cat(p_result_cle->SoldUnitCount); rInfoBuf.CRB().Tab().Cat("Flags").CatDiv(':', 2).Cat(p_result_cle->Flags); + // @v12.1.11 { + { + static const SIntToSymbTabEntry chzn_pm_flags[] = { + { PPChZnPrcssr::PermissiveModeInterface::CodeStatus::fFound, "found" }, + { PPChZnPrcssr::PermissiveModeInterface::CodeStatus::fValid, "valid" }, + { PPChZnPrcssr::PermissiveModeInterface::CodeStatus::fVerified, "verified" }, + { PPChZnPrcssr::PermissiveModeInterface::CodeStatus::fRealizable, "realizable" }, + { PPChZnPrcssr::PermissiveModeInterface::CodeStatus::fUtilised, "utilised" }, + { PPChZnPrcssr::PermissiveModeInterface::CodeStatus::fIsOwner, "is-owner" }, + { PPChZnPrcssr::PermissiveModeInterface::CodeStatus::fIsBlocked, "is-blocked" }, + { PPChZnPrcssr::PermissiveModeInterface::CodeStatus::fIsTracking, "is-tracking" }, + { PPChZnPrcssr::PermissiveModeInterface::CodeStatus::fSold, "sold" }, + { PPChZnPrcssr::PermissiveModeInterface::CodeStatus::fGrayZone, "gray-zone" }, + }; + for(uint i = 0; i < SIZEOFARRAY(chzn_pm_flags); i++) { + rInfoBuf.CRB().Tab(2).Cat(chzn_pm_flags[i].P_Symb).CatDiv(':', 2).Cat(STextConst::GetBool(p_result_cle->Flags & chzn_pm_flags[i].Id)); + } + } + // } @v12.1.11 rInfoBuf.CRB().Tab().Cat("ExpiryDtm").CatDiv(':', 2).Cat(p_result_cle->ExpiryDtm, DATF_ISO8601CENT, 0); rInfoBuf.CRB().Tab().Cat("ProductionDtm").CatDiv(':', 2).Cat(p_result_cle->ProductionDtm, DATF_ISO8601CENT, 0); rInfoBuf.CRB().Tab().Cat("Weight").CatDiv(':', 2).Cat(p_result_cle->Weight, MKSFMTD(0, 3, 0)); diff --git a/Src/PPLib/ie_bill.cpp b/Src/PPLib/ie_bill.cpp index 630265f79f..af78cd2009 100644 --- a/Src/PPLib/ie_bill.cpp +++ b/Src/PPLib/ie_bill.cpp @@ -7129,7 +7129,7 @@ int DocNalogRu_Generator::WriteInvoiceItems(const PPBillImpExpParam & rParam, co { const ObjTagItem * p_local_tag_item = rBp.LTagL.GetTag(item_idx, PPTAG_LOT_CHZNINTQTTY); int temp_int = 0; - if(p_local_tag_item && p_local_tag_item->GetInt(&temp_int) && temp_int > 0 && temp_int < 100) + if(p_local_tag_item && p_local_tag_item->GetInt(&temp_int) && temp_int > 0 && temp_int < 1000) // @v12.1.11 100-->1000 chzn_int_qty = temp_int; } // } @v12.1.4 @@ -7143,7 +7143,7 @@ int DocNalogRu_Generator::WriteInvoiceItems(const PPBillImpExpParam & rParam, co if(chzn_prod_type == GTCHZNPT_MILK && is_weighted_ware) { // @v11.9.7 // - (temp_buf = barcode_for_marking).PadLeft(14-barcode_for_marking.Len(), '0').Insert(0, "02").Cat("37"); // @v12.1.4 .Cat("1"); - temp_buf.Cat((chzn_int_qty > 0 && chzn_int_qty < 100) ? chzn_int_qty : 1); // @v12.1.4 + temp_buf.Cat((chzn_int_qty > 0 && chzn_int_qty < 1000) ? chzn_int_qty : 1); // @v12.1.4 // @v12.1.11 100-->1000 SXml::WNode n_marks(P_X, GetToken_Ansi(PPHSC_RU_WAREIDENTBLOCK)); n_marks.PutInner(GetToken_Ansi(PPHSC_RU_WAREIDENT_PACKCODE), EncText(temp_buf)); } @@ -7191,10 +7191,10 @@ int DocNalogRu_Generator::WriteInvoiceItems(const PPBillImpExpParam & rParam, co if(chzn_gtin14_buf.NotEmpty()) { temp_buf.Z().Cat("01").Cat(chzn_gtin14_buf).Cat("37"); // @v12.1.4 .Cat("01"/* - */); // @v12.1.4 { - if(chzn_int_qty > 0 && chzn_int_qty < 100) - temp_buf.CatLongZ(chzn_int_qty, 2); + if(chzn_int_qty > 0 && chzn_int_qty < 1000) // @v12.1.11 100-->1000 + temp_buf.Cat(chzn_int_qty); else - temp_buf.Cat("01"); + temp_buf.Cat("1"); // } @v12.1.4 n_marks.PutInner(GetToken_Ansi(PPHSC_RU_WAREIDENT_PACKCODE), EncText(temp_buf)); is_mark_accepted = true; diff --git a/Src/PPLib/objbizsc2.cpp b/Src/PPLib/objbizsc2.cpp index 453f66e5d8..60d278e704 100644 --- a/Src/PPLib/objbizsc2.cpp +++ b/Src/PPLib/objbizsc2.cpp @@ -45,6 +45,9 @@ static const SIntToSymbTabEntry BzsISymList[] = { // @v12.1.6 { PPBZSI_SALECOST, "salecost" }, { PPBZSI_FREIGHT, "freight" }, { PPBZSI_ORDCANCELLATIONRATE, "ordcancellationrate" }, // @v12.1.11 + { PPBZSI_SALERETCOUNT, "saleretcount" }, // @v12.1.11 + { PPBZSI_SALERETQTTY, "saleretqtty" }, // @v12.1.11 + { PPBZSI_SALERETCOST, "saleretcost" }, // @v12.1.11 }; static const SIntToSymbTabEntry BzsIDescrList[] = { // @v12.1.11 @@ -85,6 +88,9 @@ static const SIntToSymbTabEntry BzsIDescrList[] = { // @v12.1.11 { PPBZSI_SALECOST, "bzsi_salecost" }, { PPBZSI_FREIGHT, "bzsi_freight" }, { PPBZSI_ORDCANCELLATIONRATE, "bzsi_ordcancellationrate" }, // @v12.1.11 + { PPBZSI_SALERETCOUNT, "bzsi_saleretcount" }, // @v12.1.11 + { PPBZSI_SALERETQTTY, "bzsi_saleretqtty" }, // @v12.1.11 + { PPBZSI_SALERETCOST, "bzsi_saleretcost" }, // @v12.1.11 }; static const int BzsINonAdditiveList[] = { diff --git a/Src/PPLib/objg_etc.cpp b/Src/PPLib/objg_etc.cpp index cf8e6a1a2d..814644b71d 100644 --- a/Src/PPLib/objg_etc.cpp +++ b/Src/PPLib/objg_etc.cpp @@ -1616,7 +1616,6 @@ int PPViewComputer::_GetDataForBrowser(SBrowserDataProcBlock * pBlk) int PPViewComputer::MakeList() { int ok = 1; - PPSwProgram item; GoodsCore * p_tbl = Obj.P_Tbl; PPIDArray result_list; Goods2Tbl::Key2 k2; diff --git a/Src/PPLib/objsalar.cpp b/Src/PPLib/objsalar.cpp index cbcdbd325e..aee1c278ca 100644 --- a/Src/PPLib/objsalar.cpp +++ b/Src/PPLib/objsalar.cpp @@ -1993,7 +1993,7 @@ int PPObjStaffCal::InitScObjAssoc(PPID calID, PPID prjCalID, const PersonPostTbl for(uint i = 0; i < ScObjAssoc::scCount; i++) { ScObjAssoc::H & r_entry = pAssc->List[i]; if(i != ScObjAssoc::scHeader) { - if(r_entry.Oi.Obj && r_entry.Oi.Id) { + if(r_entry.Oi.IsFullyDefined()) { PPStaffCal sc_rec; if(SearchByObj(cal_id, r_entry.Oi, &sc_rec) > 0) { r_entry.CalID = sc_rec.ID; @@ -2027,7 +2027,7 @@ int PPObjStaffCal::InitScObjAssoc(PPID calID, PPID prjCalID, PPID personID, ScOb for(uint i = 0; i < ScObjAssoc::scCount; i++) { ScObjAssoc::H & r_entry = pAssc->List[i]; if(i != ScObjAssoc::scHeader) { - if(r_entry.Oi.Obj && r_entry.Oi.Id) { + if(r_entry.Oi.IsFullyDefined()) { PPStaffCal sc_rec; if(cal_id && SearchByObj(cal_id, r_entry.Oi, &sc_rec) > 0) { r_entry.CalID = sc_rec.ID; diff --git a/Src/PPLib/objscard.cpp b/Src/PPLib/objscard.cpp index 8cd616edad..42b5e35596 100644 --- a/Src/PPLib/objscard.cpp +++ b/Src/PPLib/objscard.cpp @@ -1911,7 +1911,7 @@ PPObjSCard::Filt::Filt() : Signature(PPConst::Signature_PPObjSCard_Filt), Series TLP_IMPL(PPObjSCard, CCheckCore, P_CcTbl); PPObjSCard::PPObjSCard(void * extraPtr) : PPObject(PPOBJ_SCARD), ExtraPtr(extraPtr), P_CsObj(0), - DoObjVer_SCard(CConfig.Flags2 & CCFLG2_USEHISTSCARD) // @v10.5.3 + DoObjVer_SCard(CConfig.Flags2 & CCFLG2_USEHISTSCARD) { TLP_OPEN(P_CcTbl); P_Tbl = P_CcTbl ? &P_CcTbl->Cards : 0; diff --git a/Src/PPLib/objtrnsm.cpp b/Src/PPLib/objtrnsm.cpp index 9e099022e1..4ba080b22d 100644 --- a/Src/PPLib/objtrnsm.cpp +++ b/Src/PPLib/objtrnsm.cpp @@ -411,7 +411,7 @@ int ObjTransmContext::GetPrevRestoredObj(PPObjID * pOi) const int ObjTransmContext::ForceRestore(PPObjID oi) { int ok = -1; - if(oi.Obj && oi.Id) { + if(oi.IsFullyDefined()) { SETIFZ(P_ForceRestoreObj, new PPObjIDArray); if(P_ForceRestoreObj) { P_ForceRestoreObj->Add(oi.Obj, oi.Id); @@ -736,13 +736,11 @@ int PPObjectTransmit::PutObjectToIndex(PPID objType, PPID objID, int updProtocol PPIDArray exclude_obj_type_list; // @v11.1.7 PPOBJ_STYLOQBINDERY exclude_obj_type_list.addzlist(PPOBJ_CONFIG, PPOBJ_SCALE, PPOBJ_BHT, PPOBJ_BCODEPRINTER, PPOBJ_STYLOPALM, PPOBJ_STYLOQBINDERY, /*PPOBJ_USRGRP, PPOBJ_USR,*/ 0L); - // @v10.1.5 { if(!(Ctx.Cfg.Flags & DBDXF_SYNCUSRANDGRPS)) { exclude_obj_type_list.add(PPOBJ_USR); exclude_obj_type_list.add(PPOBJ_USRGRP); } - // } @v10.1.5 - if(oi.Obj && oi.Id && !exclude_obj_type_list.lsearch(oi.Obj)) { + if(oi.IsFullyDefined() && !exclude_obj_type_list.lsearch(oi.Obj)) { ObjSyncQueueTbl::Key1 k1; MEMSZERO(k1); k1.ObjType = static_cast(oi.Obj); @@ -1615,7 +1613,7 @@ int PPObjectTransmit::RestoreObj(RestoreObjBlock & rBlk, RestoreObjItem & rItem, SETFLAG(pack.Flags, PPObjPack::fDispatcher, DestDbDivPack.Rec.Flags & DBDIVF_DISPATCH); THROW(ppobj->ProcessObjRefs(&pack, &temp, 0, &Ctx)); for(uint i = 0; temp.enumItems(&i, (void **)&p_entry);) { - if(p_entry->Obj && p_entry->Id && *p_entry != dont_process_pair /*&& !temp.Is_NotPreprocess_Pos(i-1)*/) { // @v8.0.9 && !temp.Is_NotPreprocess_Pos(i-1) + if(p_entry->IsFullyDefined() && *p_entry != dont_process_pair /*&& !temp.Is_NotPreprocess_Pos(i-1)*/) { // @v8.0.9 && !temp.Is_NotPreprocess_Pos(i-1) if(!temp.Is_NotPreprocess_Pos(i-1) && P_Queue->SearchObject_(p_entry->Obj, p_entry->Id, rItem.DBID, &idx_rec) > 0) { RestoreObjItem inner_item; THROW(rBlk.SetQueueItem(idx_rec, &inner_item)); diff --git a/Src/PPLib/phnpan.cpp b/Src/PPLib/phnpan.cpp index d3e363f8bd..954c9fb7cf 100644 --- a/Src/PPLib/phnpan.cpp +++ b/Src/PPLib/phnpan.cpp @@ -1166,7 +1166,7 @@ void PhonePaneDialog::SelectContact(PPObjID oid, int onInit) S.PersonID = 0; S.SCardID = 0; S.LocID = 0; - if(oid.Obj && oid.Id) { + if(oid.IsFullyDefined()) { if(oid.Obj == PPOBJ_PERSON) { //DisableClusterItem(CTL_PHNCPANE_LISTMODE, 2, 0); //DisableClusterItem(CTL_PHNCPANE_LISTMODE, 3, 0); diff --git a/Src/PPLib/ppbuild.cpp b/Src/PPLib/ppbuild.cpp index c14e5a6da6..cead2304c9 100644 --- a/Src/PPLib/ppbuild.cpp +++ b/Src/PPLib/ppbuild.cpp @@ -1,5 +1,5 @@ // PPBUILD.CPP -// Copyright (c) A.Sobolev 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 +// Copyright (c) A.Sobolev 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 // @codepage UTF-8 // #include @@ -46,7 +46,7 @@ PrcssrBuild::Param & FASTCALL PrcssrBuild::Param::Copy(const Param & rS) Ver = rS.Ver; Flags = rS.Flags; ConfigEntryIdx = rS.ConfigEntryIdx; - XpConfigEntryIdx = rS.XpConfigEntryIdx; // @v10.6.1 + XpConfigEntryIdx = rS.XpConfigEntryIdx; VerSuffix = rS.VerSuffix; TSCollection_Copy(ConfigList, rS.ConfigList); return *this; @@ -207,7 +207,7 @@ int PrcssrBuild::EditParam(Param * pParam) config_str_list.Add(i+1, p_entry->Name); } SetupStrAssocCombo(this, CTLSEL_SELFBUILD_CONFIG, config_str_list, Data.ConfigEntryIdx, 0, 0, 0); - SetupStrAssocCombo(this, CTLSEL_SELFBUILD_SCFG, config_str_list, Data.XpConfigEntryIdx, 0, 0, 0); // @v10.6.1 + SetupStrAssocCombo(this, CTLSEL_SELFBUILD_SCFG, config_str_list, Data.XpConfigEntryIdx, 0, 0, 0); } AddClusterAssoc(CTL_SELFBUILD_FLAGS, 0, PrcssrBuild::Param::fBuildClient); AddClusterAssoc(CTL_SELFBUILD_FLAGS, 1, PrcssrBuild::Param::fBuildServer); @@ -225,7 +225,7 @@ int PrcssrBuild::EditParam(Param * pParam) DECL_DIALOG_GETDTS() { getCtrlData(CTLSEL_SELFBUILD_CONFIG, &Data.ConfigEntryIdx); - getCtrlData(CTLSEL_SELFBUILD_SCFG, &Data.XpConfigEntryIdx); // @v10.6.1 + getCtrlData(CTLSEL_SELFBUILD_SCFG, &Data.XpConfigEntryIdx); GetClusterData(CTL_SELFBUILD_FLAGS, &Data.Flags); getCtrlString(CTL_SELFBUILD_VERSFX, Data.VerSuffix); ASSIGN_PTR(pData, Data); @@ -256,7 +256,6 @@ int PrcssrBuild::EditParam(Param * pParam) PrevTimeoutRest = timeout_rest; if(diff >= (CloseTimeout * CLOCKS_PER_SEC)) { if(IsInState(sfModal)) { - // @v10.5.9 clearEvent(event); endModal(cmOK); return; // После endModal не следует обращаться к this } @@ -516,7 +515,7 @@ int PrcssrBuild::Helper_Compile(const Param::ConfigEntry * pCfgEntry, int supple THROW_PP_S(msvs_path.NotEmpty() && fileExists(msvs_path), PPERR_BUILD_COMPILERNFOUND, temp_buf); for(uint j = 0; j < SIZEOFARRAY(sln_list); j++) { SolutionEntry & r_sln_entry = sln_list[j]; - if(P.Flags & r_sln_entry.Flag && (!supplementalConfig || r_sln_entry.Flag & Param::fSupplementalBuild)) { // @v10.6.1 (!supplementalConfig || r_sln_entry.Flag & Param::fSupplementalBuild) + if(P.Flags & r_sln_entry.Flag && (!supplementalConfig || r_sln_entry.Flag & Param::fSupplementalBuild)) { PPGetPath(PPPATH_LOG, build_log_path); const char * p_log_build_text = supplementalConfig ? "build_xp" : "build"; build_log_path.SetLastSlash().Cat(p_log_build_text).CatChar('-').Cat(r_sln_entry.P_Name).DotCat("log"); @@ -689,14 +688,10 @@ int PrcssrBuild::Run() CatEq("/DSRC_ROOT", p_config_entry->RootPath).Space().Cat("/NOCD").Space().Cat("/V2").Space().Cat("/P1").Space(); if(r_nsis_entry.P_Config) temp_buf.Cat("/D").Cat(r_nsis_entry.P_Config).Space(); - // @v10.6.1 { if(p_supplemental_config_entry) temp_buf.Cat("/D").Cat("XPCOMPAT").Space(); - // } @v10.6.1 - // @v9.4.9 { if(P.Flags & Param::fOpenSource) temp_buf.Cat("/D").Cat("OPENSOURCE").Space(); - // } @v9.4.9 temp_buf.Cat("/O").Cat(build_log_path).Space().Cat(r_nsis_entry.P_NsisFile); STempBuffer cmd_line((temp_buf.Len() + 32) * sizeof(TCHAR)); diff --git a/Src/PPLib/ppcmd.cpp b/Src/PPLib/ppcmd.cpp index cd88c5d9cb..ac9a18e3a6 100644 --- a/Src/PPLib/ppcmd.cpp +++ b/Src/PPLib/ppcmd.cpp @@ -22,9 +22,9 @@ void PPCommandDescr::Init() MenuCm = 0; IconId = 0; ToolbarId = 0; - ViewId = 0; // @v10.3.8 @fix - FiltId = 0; // @v10.3.8 @fix - FiltExtId = 0; // @v10.3.8 @fix + ViewId = 0; + FiltId = 0; + FiltExtId = 0; memzero(&Reserve, sizeof(Reserve)); Symb.Z(); Text.Z(); diff --git a/Src/PPLib/ppdbmake.cpp b/Src/PPLib/ppdbmake.cpp index a3f1cf4b3a..118669debd 100644 --- a/Src/PPLib/ppdbmake.cpp +++ b/Src/PPLib/ppdbmake.cpp @@ -1,5 +1,5 @@ // PPDBMAKE.CPP -// Copyright (c) Osolotkin A.V, Sobolev A. 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2013, 2016, 2017, 2018, 2019, 2020, 2023 +// Copyright (c) Osolotkin A.V, Sobolev A. 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2013, 2016, 2017, 2018, 2019, 2020, 2023, 2024 // @codepage UTF-8 // #include @@ -10,14 +10,13 @@ static int isNeededFile(const char * pName) const char * p_tables[] = { "Reference2", "Property", - "UuidRef", // @v10.7.7 - "TextRef", // @v10.7.7 - "UnxTextRef", // @v10.7.7 + "UuidRef", + "TextRef", + "UnxTextRef", "ObjSync", "ObjAssoc", "World", "Person", - // @v10.7.7 "BankAccount", "PersonKind", "Register", "PersonEvent", @@ -47,12 +46,6 @@ static int isNeededFile(const char * pName) if(sstreqi_ascii(p_tables[i], pName)) ok = 1; } - /* @v10.7.7 { - SString temp_buf; - for(int i = 0; !ok && PPGetSubStr(PPTXT_NEEDEDFILES, i, temp_buf) > 0; i++) - if(temp_buf.CmpNC(pName) == 0) - ok = 1; - }*/ return ok; } diff --git a/Src/PPLib/ppdbqf.cpp b/Src/PPLib/ppdbqf.cpp index 99ec8d6144..cb35a9a5d5 100644 --- a/Src/PPLib/ppdbqf.cpp +++ b/Src/PPLib/ppdbqf.cpp @@ -423,7 +423,7 @@ static IMPL_DBE_PROC(dbqf_objregistertext_iii) //(registerTypeID, objtype, objid) const PPID reg_type = params[0].lval; PPObjID oid(params[1].lval, params[2].lval); - if(reg_type && oid.Obj && oid.Id) { + if(reg_type && oid.IsFullyDefined()) { PPID reg_id = 0; PPObjRegister reg_obj; RegisterTbl::Rec reg_rec; diff --git a/Src/PPLib/ppdesktp.cpp b/Src/PPLib/ppdesktp.cpp index 0e03184ee5..81cf1e601d 100644 --- a/Src/PPLib/ppdesktp.cpp +++ b/Src/PPLib/ppdesktp.cpp @@ -1380,7 +1380,7 @@ void PPDesktop::Unadvise() PPEventCore ec; PPEventCore::Packet ec_pack; if(ec.Get(pEv->ExtInt_, &ec_pack) > 0) { - if(ec_pack.Oid.Obj && ec_pack.Oid.Id) { + if(ec_pack.Oid.IsFullyDefined()) { GetObjectName(ec_pack.Oid.Obj, ec_pack.Oid.Id, temp_buf); msg_buf.CR().Cat(temp_buf); } diff --git a/Src/PPLib/ppdevice.cpp b/Src/PPLib/ppdevice.cpp index 783005b437..175dd4de16 100644 --- a/Src/PPLib/ppdevice.cpp +++ b/Src/PPLib/ppdevice.cpp @@ -3,7 +3,7 @@ // #include #pragma hdrstop -#include // @v10.8.10 +#include // // // diff --git a/Src/PPLib/ppevent.cpp b/Src/PPLib/ppevent.cpp index dcf1d9e9b0..bdf721ab2e 100644 --- a/Src/PPLib/ppevent.cpp +++ b/Src/PPLib/ppevent.cpp @@ -834,11 +834,11 @@ int PPViewEvent::MakeList(PPViewBrowser * pBrw) new_item.Status = pack.Status; new_item.UserID = pack.UserID; new_item.GlobalUserID = pack.GlobalUserID; - new_item.EventSubscrID = pack.EvSubscrID; // @v10.9.1 + new_item.EventSubscrID = pack.EvSubscrID; new_item.Oid = pack.Oid; new_item.Flags = pack.Flags; StrPool.AddS(pack.Text, &new_item.TextP); - if(new_item.Oid.Obj && new_item.Oid.Id) { + if(new_item.Oid.IsFullyDefined()) { PPObjNamePEntry objn_entry(new_item.Oid.Obj, new_item.Oid.Id); objn_entry.NameP = 0; uint objn_pos = 0; @@ -1026,7 +1026,7 @@ int PPViewEvent::Detail(const void * pHdr, PPViewBrowser * pBrw) BrwItem item; if(!RVALUEPTR(item, static_cast(pHdr))) MEMSZERO(item); - if(item.Oid.Obj && item.Oid.Id) { + if(item.Oid.IsFullyDefined()) { EditObj(&item.Oid); } return -1; diff --git a/Src/PPLib/ppgeo.cpp b/Src/PPLib/ppgeo.cpp index 5dfb1f640e..4e7a3b783c 100644 --- a/Src/PPLib/ppgeo.cpp +++ b/Src/PPLib/ppgeo.cpp @@ -1342,7 +1342,7 @@ int GeoTrackCore::PutItem(const PPGeoTrackItem & rItem, int use_ta) THROW_DB(insertRecBuf(&rec)); } else { - if(rItem.ExtOid.Obj && rItem.ExtOid.Id) { + if(rItem.ExtOid.IsFullyDefined()) { if(founded_item.ExtOid.Id == 0) { THROW_DB(updateRecBuf(&rec)); } @@ -1661,7 +1661,7 @@ int PPViewGeoTracking::Export() THROW(InitIteration()); if(GetCounter().GetTotal()) { SString fn_suffix; - if(Filt.Oi.Obj && Filt.Oi.Id) { + if(Filt.Oi.IsFullyDefined()) { GetObjectName(Filt.Oi.Obj, Filt.Oi.Id, fn_suffix); } out_file_name.Z().Cat("geo-tracking"); diff --git a/Src/PPLib/ppreport.cpp b/Src/PPLib/ppreport.cpp index 9b6f7f8c6a..fcc5bf45a9 100644 --- a/Src/PPLib/ppreport.cpp +++ b/Src/PPLib/ppreport.cpp @@ -36,8 +36,6 @@ PESetReportOptions PESetSectionFormat PEStartPrintJob */ - -// @v10.8.7 #include // Vadim 03.09.02 - надо подключить shlwapi.lib // // Закомментировать, если немодальный предварительный просмотр печати будет сбоить // @@ -111,7 +109,7 @@ PrnDlgAns::PrnDlgAns(const PrnDlgAns & rS) : Dest(0), Selection(0), NumCopies(1) PrnDlgAns::~PrnDlgAns() { - ZDELETE(P_DevMode); //@v10.4.10 + ZDELETE(P_DevMode); } PrnDlgAns & FASTCALL PrnDlgAns::operator = (const PrnDlgAns & rS) @@ -1027,10 +1025,8 @@ class Print2Dialog : public TDialog { Data.Selection = 0; { bool silent = false; - /* @v10.7.6 if(LoadExportOptions(P_Data->P_ReportName, 0, &silent, temp_buf.Z()) > 0) - EnableEMail = 1; */ - LoadExportOptions(Data.ReportName, 0, &silent, temp_buf.Z()); // @v10.7.6 - EnableEMail = 1; // @v10.7.6 + LoadExportOptions(Data.ReportName, 0, &silent, temp_buf.Z()); + EnableEMail = 1; } AddClusterAssoc(CTL_PRINT2_ACTION, 0, PrnDlgAns::aPrint); AddClusterAssoc(CTL_PRINT2_ACTION, 1, PrnDlgAns::aExport); @@ -1073,7 +1069,6 @@ class Print2Dialog : public TDialog { // Перемещаем принтер по умолчанию на верх списка // long def_prn_id = 0; - // @v10.7.10 { if(last_selected_printer.NotEmpty()) { for(uint j = 0; j < PrnList.getCount(); j++) { if(last_selected_printer.IsEqNC(PrnList.at(j).PrinterName)) { @@ -1083,7 +1078,6 @@ class Print2Dialog : public TDialog { } } } - // } @v10.7.10 if(!def_prn_id) { for(uint j = 0; j < PrnList.getCount(); j++) { if(PrnList.at(j).Flags & SPrinting::PrnInfo::fDefault) { @@ -1115,7 +1109,7 @@ class Print2Dialog : public TDialog { Data.Selection = getCtrlLong(CTLSEL_PRINT2_REPORT)-1; Data.NumCopies = getCtrlLong(CTL_PRINT2_NUMCOPIES); Data.Flags &= ~PrnDlgAns::fEMail; - if(oneof2(Data.Dest, PrnDlgAns::aExport, PrnDlgAns::aExportXML) && EnableEMail) { // @v10.7.7 PrnDlgAns::aExportXML + if(oneof2(Data.Dest, PrnDlgAns::aExport, PrnDlgAns::aExportXML) && EnableEMail) { if(getCtrlUInt16(CTL_PRINT2_DOMAIL)) { Data.Flags |= PrnDlgAns::fEMail; getCtrlString(CTL_PRINT2_MAKEDATAPATH, Data.EmailAddr); @@ -1126,13 +1120,11 @@ class Print2Dialog : public TDialog { GetClusterData(CTL_PRINT2_DUPLEX, &Data.Flags); long sel_id = getCtrlLong(CTLSEL_PRINT2_PRINTER); Data.Printer = (sel_id && sel_id <= PrnList.getCountI()) ? PrnList.at(sel_id-1).PrinterName : 0; - // @v10.7.10 { Data.Printer.Strip(); if(PrnCfg.Flags & PrnCfg.fStoreLastSelPrn) { WinRegKey reg_key(HKEY_CURRENT_USER, PPConst::WrKey_SysSettings, 0); reg_key.PutString(PPConst::WrParam_LastSelectedPrinter, Data.Printer); } - // } @v10.7.10 ASSIGN_PTR(pData, Data); return ok; } @@ -1205,7 +1197,7 @@ class Print2Dialog : public TDialog { path.SetLastSlash().Cat(data_name); disableCtrl(CTL_PRINT2_MAKEDATAPATH, 0); } - else if(oneof2(Data.Dest, PrnDlgAns::aExport, PrnDlgAns::aExportXML)) { // @v10.7.6 PrnDlgAns::aExportXML + else if(oneof2(Data.Dest, PrnDlgAns::aExport, PrnDlgAns::aExportXML)) { if(EnableEMail) { enable_email = 1; disableCtrl(CTL_PRINT2_MAKEDATAPATH, 0); @@ -1216,7 +1208,7 @@ class Print2Dialog : public TDialog { disableCtrl(CTL_PRINT2_MAKEDATAPATH, 1); } disableCtrl(CTL_PRINT2_DOMAIL, !enable_email); - SetupWordSelector(CTL_PRINT2_MAKEDATAPATH, (enable_email ? new TextHistorySelExtra("email-common") : 0), 0, 2, WordSel_ExtraBlock::fFreeText); // @v10.7.7 + SetupWordSelector(CTL_PRINT2_MAKEDATAPATH, (enable_email ? new TextHistorySelExtra("email-common") : 0), 0, 2, WordSel_ExtraBlock::fFreeText); setCtrlString(CTL_PRINT2_MAKEDATAPATH, path); } @@ -1703,8 +1695,6 @@ static int SetPrinterParam(short hJob, const char * pPrinter, long options, cons return ok; } -// @v10.7.10 const char * DefaultWindowsPrinter = "DefaultWindowsPrinter"; - int GetWindowsPrinter(PPID * pPrnID, SString * pPort) { int ok = -1; @@ -2679,7 +2669,6 @@ static int FASTCALL __PPAlddPrint(int rptId, PPFilt * pF, int isView, const PPRe else if(rpt.PrnDest == PrnDlgAns::aExportXML) { ep.Cp = DS.GetConstTLA().DL600XmlCp; THROW(p_rtm->ExportXML(ep, out_file_name)); - // @v10.7.7 { if(pans.Flags & pans.fEMail && pans.EmailAddr.NotEmptyS() && fileExists(out_file_name)) { // // Отправка на определенный почтовый адрес @@ -2690,7 +2679,6 @@ static int FASTCALL __PPAlddPrint(int rptId, PPFilt * pF, int isView, const PPRe THROW(SendMailWithAttach(pans.ReportName, out_file_name, pans.ReportName, pans.EmailAddr, alb_cfg.Hdr.MailAccID)); } } - // } @v10.7.7 } else { if(oneof2(rpt.PrnDest, PrnDlgAns::aPrepareData, PrnDlgAns::aPrepareDataAndExecCR)) { diff --git a/Src/PPLib/ppserver.cpp b/Src/PPLib/ppserver.cpp index 019b9b4af1..2d28a498ab 100644 --- a/Src/PPLib/ppserver.cpp +++ b/Src/PPLib/ppserver.cpp @@ -2638,6 +2638,14 @@ PPWorkerSession::CmdRet PPWorkerSession::ProcessCommand_(PPServerCmd * pEv, PPJo DS.GetVersion().ToStr(temp_buf.Z()); p_js_reply->InsertString("server_version", temp_buf); } + // @v12.1.11 { + { + PPID main_org_id = GetMainOrgID(); + if(main_org_id) { + p_js_reply->InsertInt("main_org_id", main_org_id); + } + } + // } @v12.1.11 p_js_reply->ToStr(temp_buf); rReply.SetString(temp_buf); } diff --git a/Src/PPLib/ppsupplix.cpp b/Src/PPLib/ppsupplix.cpp index 065bfc307c..43798ae6c1 100644 --- a/Src/PPLib/ppsupplix.cpp +++ b/Src/PPLib/ppsupplix.cpp @@ -7937,7 +7937,7 @@ int GazpromNeft::GetProducts(bool useStorage) if(p_entry->Ident != 0 && p_entry->Name[0]) { temp_buf.Z(); temp_buf.Cat(p_entry->Ident).Tab().Cat(p_entry->Name).Tab().Cat(p_entry->Weight, MKSFMTD(0, 6, 0)).Tab(). - Cat(p_entry->Capacity, MKSFMTD(0, 6, 0)).Tab().Cat(p_entry->IsActive ? "true" : "false").Tab(). + Cat(p_entry->Capacity, MKSFMTD(0, 6, 0)).Tab().Cat(STextConst::GetBool(p_entry->IsActive)).Tab(). Cat(p_entry->PackingTypeName).Tab().Cat(p_entry->PackingTypeId).Tab(). Cat(p_entry->PackagingTypeName).Tab().Cat(p_entry->PackagingTypeUuid, S_GUID::fmtIDL); f_out.WriteLine(temp_buf.CR()); @@ -8102,7 +8102,7 @@ int GazpromNeft::GetClients() if(p_entry->Ident != 0 && p_entry->Name[0]) { temp_buf.Z(); temp_buf.Cat(p_entry->Ident).Tab().Cat(p_entry->Name).Tab().Cat(p_entry->Weight, MKSFMTD(0, 6, 0)).Tab(). - Cat(p_entry->Capacity, MKSFMTD(0, 6, 0)).Tab().Cat(p_entry->IsActive ? "true" : "false").Tab(). + Cat(p_entry->Capacity, MKSFMTD(0, 6, 0)).Tab().Cat(STextConst::GetBool(p_entry->IsActive)).Tab(). Cat(p_entry->PackingTypeName).Tab().Cat(p_entry->PackingTypeId).Tab(). Cat(p_entry->PackagingTypeName).Tab().Cat(p_entry->PackagingTypeUuid, S_GUID::fmtIDL); f_out.WriteLine(temp_buf.CR()); diff --git a/Src/PPLib/ppview.cpp b/Src/PPLib/ppview.cpp index 00e820b97f..a5882acade 100644 --- a/Src/PPLib/ppview.cpp +++ b/Src/PPLib/ppview.cpp @@ -2020,7 +2020,7 @@ void PPView::Helper_FormatCycle(const PPCycleFilt & rCf, const PPCycleArray & rC int PPView::Helper_ProcessQuickTagEdit(PPObjID oid, const void * pHdrPtr /*(LongArray *)*/) { int ok = -1; - if(pHdrPtr && oid.Obj && oid.Id) { + if(pHdrPtr && oid.IsFullyDefined()) { const LongArray * p_tag_id_list = static_cast(pHdrPtr); const uint lc = p_tag_id_list->getCount(); if(lc > 0 && lc < 20) { // Ограничение 20 частично страхует от случая, когда вместо указателя на LongArray нам подсунули что-то иное diff --git a/Src/PPLib/styloq.cpp b/Src/PPLib/styloq.cpp index 44a4c92df3..97315c8fc0 100644 --- a/Src/PPLib/styloq.cpp +++ b/Src/PPLib/styloq.cpp @@ -772,7 +772,7 @@ int StyloQFace::SetVerifiability(int v) /*int StyloQFace::SetVerifiable(bool v) { SString & r_temp_buf = SLS.AcquireRvlStr(); - return Set(tagVerifiable, 0, v ? "true" : "false"); + return Set(tagVerifiable, 0, STextConst::GetBool(v)); }*/ int StyloQFace::GetExactly(int tag, int lang, SString & rResult) const @@ -7377,13 +7377,13 @@ long OnetimePass(PPID userID); // @v11.1.9 /*static*/void PPStyloQInterchange::Stq_CmdStat_MakeRsrv_Response::RegisterOid(Stq_CmdStat_MakeRsrv_Response * pThis, PPObjID oid) { - if(pThis && oid.Obj && oid.Id) + if(pThis && oid.IsFullyDefined()) pThis->OidList.Add(oid.Obj, oid.Id); } /*static*/void PPStyloQInterchange::Stq_CmdStat_MakeRsrv_Response::RegisterBlobOid(Stq_CmdStat_MakeRsrv_Response * pThis, PPObjID oid) { - if(pThis && oid.Obj && oid.Id) + if(pThis && oid.IsFullyDefined()) pThis->BlobOidList.Add(oid.Obj, oid.Id); } diff --git a/Src/PPLib/uniprice.cpp b/Src/PPLib/uniprice.cpp index ea5cc95394..02d52e0ee4 100644 --- a/Src/PPLib/uniprice.cpp +++ b/Src/PPLib/uniprice.cpp @@ -1,5 +1,5 @@ // UNIPRICE.CPP -// Copyright (c) A.Sobolev 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016, 2017, 2019, 2020, 2021, 2022, 2023 +// Copyright (c) A.Sobolev 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016, 2017, 2019, 2020, 2021, 2022, 2023, 2024 // @codepage UTF-8 // Унификация цен реализации товара // @@ -202,7 +202,8 @@ int PrcssrUnifyPrice::EditParam(PrcssrUnifyPriceFilt * pParam) { int ok = 1; uint sel = 0; - int cost_base = 0, abs_val = 0; + int cost_base = 0; + int abs_val = 0; size_t spctval_len = 0; char spctval[64]; ushort v; diff --git a/Src/PPLib/v_gstruc.cpp b/Src/PPLib/v_gstruc.cpp index 234249fd8c..d023acff25 100644 --- a/Src/PPLib/v_gstruc.cpp +++ b/Src/PPLib/v_gstruc.cpp @@ -1,5 +1,5 @@ // V_GSTRUC.CPP -// Copyright (c) A.Starodub 2007, 2008, 2009, 2014, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 +// Copyright (c) A.Starodub 2007, 2008, 2009, 2014, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 // @codepage UTF-8 // Таблица просмотра товарных структур // @@ -710,9 +710,8 @@ int PPViewGoodsStruc::Recover() for(uint j = 0; j < Problems.getCount(); j++) { const PPObjGoodsStruc::CheckGsProblem * p_problem = Problems.at(j); if(p_problem->Code == PPObjGoodsStruc::CheckGsProblem::errNoNameAmbig) - nna_gs_list.add(p_problem->GsID); + nna_gs_list.add(p_problem->LocIdent); } - // @v10.0.12 { if(flags & cfSpcDetaching) { PPGoodsStrucHeader gs_rec; PPIDArray gs_id_list; @@ -745,7 +744,6 @@ int PPViewGoodsStruc::Recover() THROW(tra.Commit()); } } - // } @v10.0.12 if(nna_gs_list.getCount()) { nna_gs_list.sortAndUndup(); SString surrogate_name; @@ -898,8 +896,8 @@ int PPViewGoodsStruc::ProcessCommand(uint ppvCmd, const void * pHdr, PPViewBrows if(brw_hdr.GStrucID && Problems.getCount()) { for(uint i = 0; i < Problems.getCount(); i++) { const PPObjGoodsStruc::CheckGsProblem * p_problem = Problems.at(i); - if(p_problem->GsID > brw_hdr.GStrucID) { - if(pBrw->search2(&p_problem->GsID, CMPF_LONG, srchFirst, 0)) { + if(static_cast(p_problem->LocIdent) > brw_hdr.GStrucID) { + if(pBrw->search2(&p_problem->LocIdent, CMPF_LONG, srchFirst, 0)) { ok = 1; break; } @@ -912,8 +910,8 @@ int PPViewGoodsStruc::ProcessCommand(uint ppvCmd, const void * pHdr, PPViewBrows uint i = Problems.getCount(); if(i) do { const PPObjGoodsStruc::CheckGsProblem * p_problem = Problems.at(--i); - if(p_problem->GsID < brw_hdr.GStrucID) { - if(pBrw->search2(&p_problem->GsID, CMPF_LONG, srchFirst, 0)) { + if(static_cast(p_problem->LocIdent) < brw_hdr.GStrucID) { + if(pBrw->search2(&p_problem->LocIdent, CMPF_LONG, srchFirst, 0)) { ok = 1; break; } @@ -926,7 +924,7 @@ int PPViewGoodsStruc::ProcessCommand(uint ppvCmd, const void * pHdr, PPViewBrows uint pp = 0; if(Problems.getCount() && Problems.bsearch(&brw_hdr.GStrucID, &pp, CMPF_LONG)) { const PPObjGoodsStruc::CheckGsProblem * p_problem = Problems.at(pp); - SString buf = p_problem->Text; + SString buf(p_problem->Descr); PPTooltipMessage(buf, 0, pBrw->H(), 10000, 0, SMessageWindow::fShowOnCursor|SMessageWindow::fCloseOnMouseLeave|SMessageWindow::fTextAlignLeft| SMessageWindow::fOpaque|SMessageWindow::fSizeByText|SMessageWindow::fChildWindow); } diff --git a/Src/PPLib/v_person.cpp b/Src/PPLib/v_person.cpp index ea1fed1ef6..75a99cf9ed 100644 --- a/Src/PPLib/v_person.cpp +++ b/Src/PPLib/v_person.cpp @@ -508,15 +508,71 @@ int PPViewPerson::OpenClientDir(PPID PersonId) return ok; } -int PPViewPerson::EditRegs(PPID id, int oneReg) +int PPViewPerson::EditRegs(PPID personID, PPID locID, int oneReg) { - int ok = -1, r = 0; + int ok = -1; + int r = 0; + ObjTagCore & r_ot = PPRef->Ot; + bool do_update_temp_rec = false; PPPersonPacket pack; THROW(PsnObj.RegObj.CheckRights(PPR_READ)); - THROW(PsnObj.GetPacket(id, &pack, 0) > 0); + THROW(PsnObj.GetPacket(personID, &pack, 0) > 0); if(oneReg) { uint pos = 0; - if(Filt.GetAttribType() == PPPSNATTR_REGISTER) { + if(Filt.Flags & PersonFilt::fLocTagF && Filt.GetAttribType() && locID) { + LocationTbl::Rec loc_rec; + if(PsnObj.LocObj.Search(locID, &loc_rec) > 0) { + if(Filt.GetAttribType() == PPPSNATTR_REGISTER) { + RegisterArray reg_list; + PsnObj.RegObj.P_Tbl->GetByLocation(locID, ®_list); + if(reg_list.GetRegister(Filt.RegTypeID, &pos, 0) > 0) { + r = PsnObj.RegObj.EditDialog(®_list.at(pos-1), &pack.Regs, &pack); + } + else { + RegisterTbl::Rec rec; + THROW(PPObjRegister::InitPacket(&rec, Filt.RegTypeID, PPObjID(PPOBJ_LOCATION, locID), 0)); + do { + r = PsnObj.RegObj.EditDialog(&rec, ®_list, &pack); + if(r > 0 && PsnObj.RegObj.CheckUnique(rec.RegTypeID, ®_list)) { + THROW_SL(reg_list.insert(&rec)); + } + else if(r >= 0) + r = PPErrorZ(); + } while(r == 0); + } + if(r > 0) { + THROW(r = PsnObj.RegObj.P_Tbl->PutByLocation(locID, ®_list, 1)); + if(r > 0) { + do_update_temp_rec = true; + THROW(EditTempRec(personID, 1)); + r = -1; // prevent updating person packet below + ok = 1; + } + } + } + else if(Filt.GetAttribType() == PPPSNATTR_TAG) { + ObjTagItem tag_item; + const PPID tag_id = Filt.RegTypeID - TAGOFFSET; + if(r_ot.GetTag(PPOBJ_LOCATION, locID, tag_id, &tag_item) > 0 || tag_item.Init(tag_id)) { + if(EditObjTagItem(PPOBJ_LOCATION, locID, &tag_item, 0) > 0) { + if(r_ot.PutTag(PPOBJ_LOCATION, locID, &tag_item, 1)) { + do_update_temp_rec = true; + ok = 1; + } + else + PPError(); + } + } + } + else { + if(PsnObj.LocObj.Edit(&locID, 0) > 0) { + ok = 1; + do_update_temp_rec = true; + } + } + } + } + else if(Filt.GetAttribType() == PPPSNATTR_REGISTER) { if(pack.Regs.GetRegister(Filt.RegTypeID, &pos, 0) > 0) r = PsnObj.RegObj.EditDialog(&pack.Regs.at(pos - 1), &pack.Regs, &pack); else { @@ -533,14 +589,18 @@ int PPViewPerson::EditRegs(PPID id, int oneReg) } } } - else + else { r = PsnObj.RegObj.EditList(&pack, 0); + } if(r > 0) { THROW(PsnObj.RegObj.CheckRights(PPR_MOD)); - THROW(PsnObj.PutPacket(&id, &pack, 1)); - THROW(EditTempRec(id, 1)); + THROW(PsnObj.PutPacket(&personID, &pack, 1)); + do_update_temp_rec = true; ok = 1; } + if(do_update_temp_rec) { + THROW(EditTempRec(personID, 1)); + } CATCHZOKPPERR return ok; } @@ -1019,10 +1079,19 @@ int PPViewPerson::CreateAddrRec(PPID addrID, const LocationTbl::Rec * pLocRec, c if(addrID) { SString temp_buf; pItem->TabID = addrID; + /* @v12.1.11 if(pAddrKindText && pAddrKindText[0] == '@') PPLoadStringS(pAddrKindText+1, temp_buf).CopyTo(pItem->RegNumber, sizeof(pItem->RegNumber)); else STRNSCPY(pItem->RegNumber, pAddrKindText); + */ + // @v12.1.11 { + if(pAddrKindText && pAddrKindText[0] == '@') + PPLoadStringS(pAddrKindText+1, temp_buf); + else + temp_buf = pAddrKindText; + StrPool.AddS(temp_buf, &pItem->AddrTypeP); + // } @v12.1.11 if(pLocRec || PsnObj.LocObj.Search(addrID, &loc_rec) > 0) { const LocationTbl::Rec * p_loc_rec = NZOR(pLocRec, &loc_rec); if(Filt.CityID && p_loc_rec->CityID != Filt.CityID) { @@ -1034,6 +1103,12 @@ int PPViewPerson::CreateAddrRec(PPID addrID, const LocationTbl::Rec * pLocRec, c else { LocationCore::GetAddress(*p_loc_rec, 0, temp_buf); StrPool.AddS(temp_buf, &pItem->AddressP); + // @v12.1.11 { + LocationCore::GetExField(p_loc_rec, LOCEXSTR_PHONE, temp_buf); + StrPool.AddS(temp_buf, &pItem->PhoneP); + LocationCore::GetExField(p_loc_rec, LOCEXSTR_EMAIL, temp_buf); + StrPool.AddS(temp_buf, &pItem->EMailP); + // } @v12.1.11 if(Filt.Flags & PersonFilt::fShowFiasRcgn && SETIFZ(P_Fr, new PPFiasReference)) { PPLocAddrStruc las(temp_buf.Transf(CTRANSF_INNER_TO_OUTER), P_Fr); S_GUID uuid; @@ -1077,6 +1152,18 @@ int PPViewPerson::CreateAddrRec(PPID addrID, const LocationTbl::Rec * pLocRec, c return ok; } +int PPViewPerson::Helper_GetTagValue(PPObjID oid, PPID tagID, SString & rBuf) +{ + rBuf.Z(); + int ok = -1; + ObjTagItem tag_item; + if(PPRef->Ot.GetTag(oid.Obj, oid.Id, tagID, &tag_item) > 0) { + tag_item.GetStr(rBuf); + ok = 1; + } + return ok; +} + int PPViewPerson::CreateTempRec(PersonTbl::Rec * pPsnRec, PPID tabID, PsnAttrViewItem * pItem) { int ok = 1; @@ -1108,7 +1195,6 @@ int PPViewPerson::CreateTempRec(PersonTbl::Rec * pPsnRec, PPID tabID, PsnAttrVie PsnObj.LocObj.GetAddress(pPsnRec->RLoc, 0, temp_buf); StrPool.AddS(temp_buf, &item.RAddressP); } - //if(item.Phone[0] == 0 && item.Address[0] == 0 && item.RAddress[0] == 0) { if(!item.PhoneP && !item.AddressP && !item.RAddressP) { if(Filt.EmptyAttrib == EA_NOEMPTY) ok = 0; @@ -1119,13 +1205,10 @@ int PPViewPerson::CreateTempRec(PersonTbl::Rec * pPsnRec, PPID tabID, PsnAttrVie else if(Filt.GetAttribType() == PPPSNATTR_EMAIL) { PPELinkArray elink_ary; if(PsnObj.P_Tbl->GetELinks(pPsnRec->ID, elink_ary)) { - SString email_list; - elink_ary.GetPhones(1, email_list, ELNKRT_EMAIL); - //email_list.CopyTo(item.Phone, sizeof(item.Phone)); - StrPool.AddS(email_list, &item.PhoneP); + elink_ary.GetPhones(1, temp_buf, ELNKRT_EMAIL); + StrPool.AddS(temp_buf, &item.EMailP); // @v12.1.11 item.PhoneP-->item.EMailP } - //if(item.Phone[0] == 0) { - if(!item.PhoneP) { + if(!item.EMailP) { // @v12.1.11 item.PhoneP-->item.EMailP if(Filt.EmptyAttrib == EA_NOEMPTY) ok = 0; } @@ -1150,29 +1233,10 @@ int PPViewPerson::CreateTempRec(PersonTbl::Rec * pPsnRec, PPID tabID, PsnAttrVie ok = 0; } else if(Filt.GetAttribType() == PPPSNATTR_TAG && Filt.RegTypeID) { - PPID tag_id = Filt.RegTypeID - TAGOFFSET; - ObjTagList tag_list; - if(PPRef->Ot.GetList(PPOBJ_PERSON, pPsnRec->ID, &tag_list)) { - const ObjTagItem * p_tag = tag_list.GetItem(tag_id); - if(p_tag) { - if(p_tag->TagDataType == OTTYP_BOOL) - ltoa(p_tag->Val.IntVal, item.RegNumber, 10); - else if(p_tag->TagDataType == OTTYP_NUMBER) - realfmt(p_tag->Val.RealVal, SFMT_MONEY, item.RegNumber); - else if(p_tag->TagDataType == OTTYP_STRING && p_tag->Val.PStr) - STRNSCPY(item.RegNumber, p_tag->Val.PStr); - else if(p_tag->TagDataType == OTTYP_ENUM) { - PPObjectTag obj_tag_rec; - ObjTag.Fetch(p_tag->TagID, &obj_tag_rec); - GetObjectName(obj_tag_rec.TagEnumID, p_tag->Val.IntVal, temp_buf.Z()); - STRNSCPY(item.RegNumber, temp_buf); - } - else if(p_tag->TagDataType == OTTYP_DATE) - datefmt(&p_tag->Val.DtVal, DATF_DMY, item.RegNumber); - } - } + Helper_GetTagValue(PPObjID(PPOBJ_PERSON, pPsnRec->ID), Filt.RegTypeID - TAGOFFSET, temp_buf); + STRNSCPY(item.RegNumber, temp_buf); //if(item.RegSerial[0] == 0 && item.RegNumber[0] == 0) { - if(!item.RegSerialP && item.RegNumber[0] == 0) { + if(item.RegNumber[0] == 0) { if(Filt.EmptyAttrib == EA_NOEMPTY) ok = 0; } @@ -1212,7 +1276,7 @@ int PPViewPerson::AddTempRec(PPID id, UintHashTable * pUsedLocList, int use_ta) PPIDArray dlvr_addr_list; TempPersonTbl::Key0 k0; ObjTagList tags; - SString buf; + SString temp_buf; SString buf2; PPTransaction tra(ppDbDependTransaction, use_ta); THROW(tra); @@ -1221,16 +1285,15 @@ int PPViewPerson::AddTempRec(PPID id, UintHashTable * pUsedLocList, int use_ta) THROW(PPRef->Ot.GetList(PPOBJ_PERSON, id, &tags)); for(uint i = 0; i < tags.GetCount(); i++) { long tab_id = DefaultTagID; - buf.Z(); const ObjTagItem * p_item = tags.GetItemByPos(i); - ObjTag.GetCurrTagVal(p_item, buf.Z()); + ObjTag.GetCurrTagVal(p_item, temp_buf); tab_id = p_item->TagID; k0.ID = id; k0.TabID = tab_id; if(P_TempPsn->search(0, &k0, spEq)) ok = -2; else if(CreateTempRec(&psn_rec, tab_id, &P_TempPsn->data) > 0) { - buf.CopyTo(P_TempPsn->data.RegNumber, sizeof(P_TempPsn->data.RegNumber)); + temp_buf.CopyTo(P_TempPsn->data.RegNumber, sizeof(P_TempPsn->data.RegNumber)); THROW_DB(P_TempPsn->insertRec()); ok = 1; } @@ -1243,7 +1306,7 @@ int PPViewPerson::AddTempRec(PPID id, UintHashTable * pUsedLocList, int use_ta) uint i; SArray rec_list(sizeof(PsnAttrViewItem)); PsnObj.GetDlvrLocList(id, &dlvr_addr_list); - if(attr_type == PPPSNATTR_ALLADDR) { + if(loc_attr == PPPSNATTR_ALLADDR) { if(psn_rec.MainLoc) { CALLPTRMEMB(pUsedLocList, Add((ulong)psn_rec.MainLoc)); long tab_id = psn_rec.MainLoc; @@ -1277,17 +1340,17 @@ int PPViewPerson::AddTempRec(PPID id, UintHashTable * pUsedLocList, int use_ta) rec_list.insert(&vi); } } - if(attr_type == PPPSNATTR_DUPDLVRADDR) { + if(loc_attr == PPPSNATTR_DUPDLVRADDR) { i = rec_list.getCount(); if(i) do { const PsnAttrViewItem & r_item = *static_cast(rec_list.at(--i)); if(i == (rec_list.getCount()-1)) { int dup = 0; - StrPool.GetS(r_item.AddressP, buf); + StrPool.GetS(r_item.AddressP, temp_buf); for(uint j = 0; j < i; j++) { const PsnAttrViewItem & r_item2 = *static_cast(rec_list.at(j)); StrPool.GetS(r_item2.AddressP, buf2); - if(buf.CmpNC(buf2) == 0) { + if(temp_buf.CmpNC(buf2) == 0) { dup = 1; break; } @@ -1307,7 +1370,55 @@ int PPViewPerson::AddTempRec(PPID id, UintHashTable * pUsedLocList, int use_ta) } else if(Filt.EmptyAttrib != EA_EMPTY) { for(i = 0; i < rec_list.getCount(); i++) { - THROW(ok = Helper_InsertTempRec(*static_cast(rec_list.at(i)))); + PsnAttrViewItem * p_attr_view = static_cast(rec_list.at(i)); + // @v12.1.11 { + bool local_ok = true; + if(Filt.Flags & PersonFilt::fLocTagF && attr_type) { + if(attr_type == PPPSNATTR_EMAIL) { + if(!p_attr_view->EMailP) { + if(Filt.EmptyAttrib == EA_NOEMPTY) + local_ok = false; + } + else if(Filt.EmptyAttrib == EA_EMPTY) + local_ok = false; + } + else if(attr_type == PPPSNATTR_PHONEADDR) { + if(!p_attr_view->PhoneP) { + if(Filt.EmptyAttrib == EA_NOEMPTY) + local_ok = false; + } + else if(Filt.EmptyAttrib == EA_EMPTY) + local_ok = false; + } + else if(attr_type == PPPSNATTR_REGISTER && Filt.RegTypeID) { + RegisterTbl::Rec reg_rec; + if(PsnObj.LocObj.GetRegister(p_attr_view->TabID, Filt.RegTypeID, ZERODATE, false, ®_rec) > 0) { + StrPool.AddS(reg_rec.Serial, &p_attr_view->RegSerialP); + STRNSCPY(p_attr_view->RegNumber, reg_rec.Num); + p_attr_view->RegInitDate = reg_rec.Dt; + p_attr_view->RegExpiry = reg_rec.Expiry; + } + if(!p_attr_view->RegSerialP && !p_attr_view->RegNumber[0]) { + if(Filt.EmptyAttrib == EA_NOEMPTY) + local_ok = false; + } + else if(Filt.EmptyAttrib == EA_EMPTY) + local_ok = false; + } + else if(attr_type == PPPSNATTR_TAG && Filt.RegTypeID) { + Helper_GetTagValue(PPObjID(PPOBJ_LOCATION, p_attr_view->TabID), Filt.RegTypeID - TAGOFFSET, temp_buf); + STRNSCPY(p_attr_view->RegNumber, temp_buf); + if(!p_attr_view->RegSerialP && p_attr_view->RegNumber[0] == 0) { + if(Filt.EmptyAttrib == EA_NOEMPTY) + local_ok = false; + } + else if(Filt.EmptyAttrib == EA_EMPTY) + local_ok = false; + } + } + // } @v12.1.11 + if(local_ok) + THROW(ok = Helper_InsertTempRec(*p_attr_view)); } } } @@ -1343,8 +1454,8 @@ int PPViewPerson::AddTempRec(PPID id, UintHashTable * pUsedLocList, int use_ta) vi.RegInitDate = r_ba.OpenDate; if(r_ba.AccType) { // @todo Чаще всего здесь одно и тоже значение PPBAC_CURRENT: можно ускорить - GetObjectName(PPOBJ_BNKACCTYPE, r_ba.AccType, buf); - buf.CopyTo(vi.RegNumber, sizeof(vi.RegNumber)); + GetObjectName(PPOBJ_BNKACCTYPE, r_ba.AccType, temp_buf); + temp_buf.CopyTo(vi.RegNumber, sizeof(vi.RegNumber)); } THROW(ok = Helper_InsertTempRec(vi)); } @@ -2167,6 +2278,25 @@ static int CellStyleFunc(const void * pData, long col, int paintAction, BrowserW pBrw->InsColumn(-1, "FIAS HOUSE", 9, 0, MKSFMT(32, 0), 0); } } + else if(Filt.Flags & PersonFilt::fLocTagF && Filt.GetAttribType()) { // @v12.1.11 + if(!P_Ct) { + if(Filt.GetAttribType() == PPPSNATTR_REGISTER) { + pBrw->InsColumn(-1, "@series", 13, 0, MKSFMT(32, 0), 0); + pBrw->InsColumn(-1, "@number", 12, 0, MKSFMT(32, 0), 0); + pBrw->InsColumn(-1, "@register_dt", 14, 0, DATF_GERMAN, 0); + pBrw->InsColumn(-1, "@register_expiry", 15, 0, DATF_GERMAN, 0); + } + else if(Filt.GetAttribType() == PPPSNATTR_TAG) { + pBrw->InsColumn(-1, "@tag", 12, 0, MKSFMT(128, 0), 0); + } + else if(Filt.GetAttribType() == PPPSNATTR_EMAIL) { + pBrw->InsColumn(-1, "@email", 11, 0, MKSFMT(128, 0), 0); + } + else if(Filt.GetAttribType() == PPPSNATTR_PHONEADDR) { + pBrw->InsColumn(-1, "@phone", 10, 0, MKSFMT(128, 0), 0); + } + } + } //@erik 02.06.2019{ // if(P_Ct && Filt.AttribType == PPPSNATTR_ALLADDR) { // BrowserDef * p_def = pBrw->getDef(); @@ -2240,6 +2370,8 @@ DBQuery * PPViewPerson::CreateBrowserQuery(uint * pBrwId, SString * pSubTitle) DBE dbe_regser; DBE dbe_fiasadrguid; DBE dbe_fiashseguid; + DBE dbe_addrtype; // @v12.1.11 + DBE dbe_email; // @v12.1.11 DBQ * dbq = 0; int tbl_count = 0; DBTable * tbl_l[12]; @@ -2284,24 +2416,37 @@ DBQuery * PPViewPerson::CreateBrowserQuery(uint * pBrwId, SString * pSubTitle) } } } - if(Filt.Flags & PersonFilt::fLocTagF && Filt.GetAttribType()) { + if(Filt.Flags & PersonFilt::fLocTagF && Filt.GetAttribType()) { // @v12.1.11 PPDbqFuncPool::InitObjNameFunc(dbe_city, PPDbqFuncPool::IdObjNameWorld, tmp_pt->CityID); PPDbqFuncPool::InitStrPoolRefFunc(dbe_addr, tmp_pt->AddressP, &StrPool); PPDbqFuncPool::InitStrPoolRefFunc(dbe_bnkacct, tmp_pt->BnkAcctP, &StrPool); PPDbqFuncPool::InitStrPoolRefFunc(dbe_fiasadrguid, tmp_pt->FiasAddrGuidP, &StrPool); PPDbqFuncPool::InitStrPoolRefFunc(dbe_fiashseguid, tmp_pt->FiasHouseGuidP, &StrPool); + PPDbqFuncPool::InitStrPoolRefFunc(dbe_addrtype, tmp_pt->AddrTypeP, &StrPool); // @v12.1.11 + PPDbqFuncPool::InitStrPoolRefFunc(dbe_phone, tmp_pt->PhoneP, &StrPool); // @v12.1.11 + PPDbqFuncPool::InitStrPoolRefFunc(dbe_email, tmp_pt->EMailP, &StrPool); // @v12.1.11 q = & select( p->ID, // #0 tmp_pt->TabID, // #1 ИД адреса p->Name, // #2 Наименование персоналии dbe_addr, // #3 Строка адреса dbe_bnkacct, // #4 Код из адреса доставки - tmp_pt->RegNumber, // #5 Тип адреса (юридический | физический | доставки) + /*tmp_pt->RegNumber*/dbe_addrtype, // #5 Тип адреса (юридический | физический | доставки) dbe_city, // #6 p->Flags, // #7 dbe_fiasadrguid, // #8 dbe_fiashseguid, // #9 - 0L).from(tbl_l[0], tbl_l[1], tbl_l[2], tbl_l[3], tbl_l[4], 0L); + dbe_phone, // #10 @v12.1.11 + dbe_email, // #11 @v12.1.11 + tmp_pt->RegNumber, // #12 @v12.1.11 либо текстовое представление тега (PPPSNATTR_TAG), либо номер регистрационного документа (PPPSNATTR_REGISTER) + 0L); + if(Filt.GetAttribType() == PPPSNATTR_REGISTER) { + PPDbqFuncPool::InitStrPoolRefFunc(dbe_regser, tmp_pt->RegSerialP, &StrPool); // @v12.1.11 + q->addField(dbe_regser); // #13 + q->addField(tmp_pt->RegInitDate); // #14 + q->addField(tmp_pt->RegExpiry); // #15 + } + q->from(tbl_l[0], tbl_l[1], tbl_l[2], tbl_l[3], tbl_l[4], 0L); } else { switch(Filt.GetAttribType()) { @@ -2322,7 +2467,7 @@ DBQuery * PPViewPerson::CreateBrowserQuery(uint * pBrwId, SString * pSubTitle) break; case PPPSNATTR_EMAIL: { - PPDbqFuncPool::InitStrPoolRefFunc(dbe_phone, tmp_pt->PhoneP, &StrPool); + PPDbqFuncPool::InitStrPoolRefFunc(dbe_phone, tmp_pt->EMailP, &StrPool); // @v12.1.11 tmp_pt->PhoneP-->tmp_pt->EMailP q = & select( p->ID, p->Name, @@ -2340,13 +2485,14 @@ DBQuery * PPViewPerson::CreateBrowserQuery(uint * pBrwId, SString * pSubTitle) PPDbqFuncPool::InitStrPoolRefFunc(dbe_bnkacct, tmp_pt->BnkAcctP, &StrPool); PPDbqFuncPool::InitStrPoolRefFunc(dbe_fiasadrguid, tmp_pt->FiasAddrGuidP, &StrPool); PPDbqFuncPool::InitStrPoolRefFunc(dbe_fiashseguid, tmp_pt->FiasHouseGuidP, &StrPool); + PPDbqFuncPool::InitStrPoolRefFunc(dbe_addrtype, tmp_pt->AddrTypeP, &StrPool); // @v12.1.11 q = & select( p->ID, // #0 tmp_pt->TabID, // #1 ИД адреса p->Name, // #2 Наименование персоналии dbe_addr, // #3 Строка адреса dbe_bnkacct, // #4 Код из адреса доставки - tmp_pt->RegNumber, // #5 Тип адреса (юридический | физический | доставки) + /*tmp_pt->RegNumber*/dbe_addrtype, // #5 Тип адреса (юридический | физический | доставки) dbe_city, // #6 p->Flags, // #7 dbe_fiasadrguid, // #8 @@ -2362,13 +2508,14 @@ DBQuery * PPViewPerson::CreateBrowserQuery(uint * pBrwId, SString * pSubTitle) PPDbqFuncPool::InitStrPoolRefFunc(dbe_bnkacct, tmp_pt->BnkAcctP, &StrPool); PPDbqFuncPool::InitStrPoolRefFunc(dbe_phone, tmp_pt->PhoneP, &StrPool); PPDbqFuncPool::InitStrPoolRefFunc(dbe_bnkname, tmp_pt->BnkNameP, &StrPool); + PPDbqFuncPool::InitStrPoolRefFunc(dbe_addrtype, tmp_pt->AddrTypeP, &StrPool); // @v12.1.11 q = & select( tmp_pt->ID, // #0 tmp_pt->TabID, // #1 ИД адреса tmp_pt->Name, // #2 Наименование персоналии dbe_addr, // #3 Строка адреса dbe_bnkacct, // #4 Код из адреса доставки - tmp_pt->RegNumber, // #5 Тип адреса (юридический | физический | доставки) + /*tmp_pt->RegNumber*/dbe_addrtype, // #5 Тип адреса (юридический | физический | доставки) dbe_city, // #6 dbe_phone, // #7 Телефон (ассоциированный с адресом) dbe_bnkname, // #8 Контакт (ассоциированный с адресом) @@ -2870,8 +3017,13 @@ int PPViewPerson::ProcessCommand(uint ppvCmd, const void * pHdr, PPViewBrowser * if(_id_to_edit) ok = (PsnObj.LocObj.Edit(&_id_to_edit, 0) == cmOK) ? 1 : -1; } - else - ok = EditRegs(hdr.ID, 1); + else { + PPID loc_id = 0; + if(Filt.Flags & PersonFilt::fLocTagF && Filt.GetAttribType()) { + loc_id = static_cast(PTR32C(pHdr)[1]); + } + ok = EditRegs(hdr.ID, loc_id, 1); + } break; case PPVCMD_DLVRADDREXFLDS: if(Filt.IsLocAttr()) { @@ -3038,7 +3190,7 @@ int PPViewPerson::ProcessCommand(uint ppvCmd, const void * pHdr, PPViewBrowser * break; case PPVCMD_EVENTS: ok = ViewPersonEvents(hdr.ID); break; case PPVCMD_FOLDER: ok = OpenClientDir(hdr.ID); break; - case PPVCMD_REGISTERS: ok = EditRegs(hdr.ID, 0); break; + case PPVCMD_REGISTERS: ok = EditRegs(hdr.ID, 0, 0); break; case PPVCMD_AMOUNTS: ok = PsnObj.EditAmountList(hdr.ID); break; case PPVCMD_ADDREL: ok = AddRelation(hdr.ID); break; case PPVCMD_PRINT: ok = Print(0); break; diff --git a/Src/PPLib/v_styloqbindery.cpp b/Src/PPLib/v_styloqbindery.cpp index 4e734973fa..c00b3a84be 100644 --- a/Src/PPLib/v_styloqbindery.cpp +++ b/Src/PPLib/v_styloqbindery.cpp @@ -1,5 +1,5 @@ // V_STYLOQBINDERY.CPP -// Copyright (c) A.Sobolev 2021, 2022, 2023 +// Copyright (c) A.Sobolev 2021, 2022, 2023, 2024 // @codepage UTF-8 // #include @@ -142,7 +142,7 @@ int PPViewStyloQBindery::MakeList(PPViewBrowser * pBrw) new_entry.LinkOid.Set(pack.Rec.LinkObjType, pack.Rec.LinkObjID); new_entry.DocType = pack.Rec.DocType; // @v11.4.5 new_entry.Flags = pack.Rec.Flags; // @v11.4.5 - if(new_entry.LinkOid.Obj && new_entry.LinkOid.Id) { + if(new_entry.LinkOid.IsFullyDefined()) { char name_buf[256]; PPObject * ppobj = ObjColl.GetObjectPtr(new_entry.LinkOid.Obj); if(ppobj && ppobj->GetName(new_entry.LinkOid.Id, name_buf, sizeof(name_buf)) > 0) { diff --git a/Src/PPLib/vetis.cpp b/Src/PPLib/vetis.cpp index 2b4712e312..52147679b3 100644 --- a/Src/PPLib/vetis.cpp +++ b/Src/PPLib/vetis.cpp @@ -6376,7 +6376,7 @@ int PPVetisInterface::SubmitRequest(VetisApplicationBlock & rAppBlk, VetisApplic PutNonZeroGuid(n_p, "bs", r_bat.ProductItem.Guid); temp_buf = r_bat.ProductItem.Name; if(temp_buf.NotEmptyS()) { - XMLReplaceSpecSymb(temp_buf, "<>&"); // @v10.4.12 + XMLReplaceSpecSymb(temp_buf, "<>&"); temp_buf.Transf(CTRANSF_INNER_TO_UTF8); n_p.PutInner(_xmlnst_dt("name"), temp_buf); } diff --git a/Src/PPMain/wsctl-main.cpp b/Src/PPMain/wsctl-main.cpp index 25aca7c3ff..407fd80651 100644 --- a/Src/PPMain/wsctl-main.cpp +++ b/Src/PPMain/wsctl-main.cpp @@ -216,16 +216,21 @@ class WsCtl_ImGuiSceneBlock : public ImGuiSceneBase { // Заполняется запросом к серверу GETDBINFO // struct DbInfo { + DbInfo() : MainOrgID(0) + { + } DbInfo & Z() { Uuid.Z(); Symb.Z(); Ver.Z(); + MainOrgID = 0; return *this; } S_GUID Uuid; // GUID базы данных SString Symb; // Символ базы данных - SVerT Ver; // Версия сервера Papyrus + SVerT Ver; // Версия сервера Papyrus + PPID MainOrgID; // @v12.1.11 Идентификатор персоналии главной организации }; struct QuotKindEntry { QuotKindEntry() : ID(0), Rank(0), DaysOfWeek(0) @@ -430,6 +435,15 @@ class WsCtl_ImGuiSceneBlock : public ImGuiSceneBase { DImageLoading() { } + DImageLoading(const DImageLoading & rS) + { + Copy(rS); + } + DImageLoading & FASTCALL operator = (const DImageLoading & rS) + { + Copy(rS); + return *this; + } bool FASTCALL Copy(const DImageLoading & rS) { DServerError::Copy(rS); @@ -444,10 +458,36 @@ class WsCtl_ImGuiSceneBlock : public ImGuiSceneBase { Entry() : Status(0) { } + Entry(const Entry & rS) : Status(0) + { + Copy(rS); + } + Entry & FASTCALL operator = (const Entry & rS) + { + Copy(rS); + return *this; + } + bool FASTCALL Copy(const Entry & rS) + { + bool ok = true; + Oid = rS.Oid; + Img = rS.Img; + Status = rS.Status; + return ok; + } PPObjID Oid; SBinaryChunk Img; int Status; // 0 - undef, -1 - error, 1 - ok }; + const Entry * SearchOid(PPObjID oid) const + { + for(uint i = 0; i < L.getCount(); i++) { + const Entry * p_entry = L.at(i); + if(p_entry && p_entry->Oid == oid) + return p_entry; + } + return 0; + } TSCollection L; // Список идентификаторов объектов, ассоциированных с загруженными изображениями // }; // @@ -589,24 +629,14 @@ class WsCtl_ImGuiSceneBlock : public ImGuiSceneBase { char SubstTxt_DbSymb[128]; char SubstTxt_User[128]; char SubstTxt_Password[128]; - //char SubstTxt_ }; - /*class ImDialog_WsCtlLogin : public ImDialogState { - public: - ImDialog_WsCtlLogin(WsCtl_ImGuiSceneBlock & rBlk); - ~ImDialog_WsCtlLogin(); - virtual int Build(); - virtual bool CommitData(); - };*/ class ImDialog_WsRegisterComputer : public ImDialogState { public: ImDialog_WsRegisterComputer(WsCtl_ImGuiSceneBlock & rBlk, WsCtl_SelfIdentityBlock * pCtx) : R_Blk(rBlk), ImDialogState(pCtx), CompCatID(0), WaitOnQueryResult(false) { SString temp_buf; - if(pCtx) { - Data = *pCtx; - } + RVALUEPTR(Data, pCtx); STRNSCPY(SubstTxt_Name, Data.PrcName); if(Data.MacAdrList.getCount()) { Data.MacAdrList.at(0).ToStr(0, temp_buf); @@ -749,6 +779,7 @@ class WsCtl_ImGuiSceneBlock : public ImGuiSceneBase { void MakeKey(const char * pFileName, SString & rKey); int Put(Texture_CachedFileEntity * pEntry); Texture_CachedFileEntity * Get(const char * pSymb); + SFileStorage & GetFileStorate() { return Fs; } private: SMtLock Lck; SString BasePath_Removed; @@ -812,18 +843,85 @@ class WsCtl_ImGuiSceneBlock : public ImGuiSceneBase { SUiLayout * MakePgmListLayout(const WsCtl_ProgramCollection & rPgmL); int QueryProgramList2(WsCtl_ProgramCollection & rPgmL, WsCtl_ClientPolicy & rPolicyL); void LoadProgramList2(); - void LoadProgramImages(WsCtl_ProgramCollection & rPgmL, TextureCache & rTextureCache); void EmitProgramGallery(ImGuiWindowByLayout & rW, SUiLayout & rTl); + void * QueryImageTextureByOid(PPObjID oid) // @construction { + { + void * p_result = 0; + //Cache_Texture + SString temp_buf; + SString signature; + DConnectionStatus conn_status; + St.D_ConnStatus.GetData(conn_status); + SBinaryChunk gi(&conn_status.Dbi.Uuid, sizeof(conn_status.Dbi.Uuid)); + PPObject::MakeBlobSignature(gi, oid, 1, signature); + Texture_CachedFileEntity * p_te = Cache_Texture.Get(signature); + { + if(!p_te || p_te->GetState() != Texture_CachedFileEntity::rstUnresolved) { + if(!Cache_Texture.GetFileStorate().GetFilePath(signature, temp_buf)) { + WsCtl_ImGuiSceneBlock::DImageLoading st_data; + St.D_ImgLd.GetData(st_data); + //PPObjID oid(PPOBJ_SWPROGRAM, p_pe_->ID); + const WsCtl_ImGuiSceneBlock::DImageLoading::Entry * p_il_entry = st_data.SearchOid(oid); + if(p_il_entry && p_il_entry->Status == -1) { + if(!p_te) { + Texture_CachedFileEntity * p_cfe = new Texture_CachedFileEntity(); + if(p_cfe) { + p_cfe->SetAsUnresolved(); + Cache_Texture.Put(p_cfe); // put program-entry img texture + p_cfe = 0; // ! prevent deletion below + } + } + else { + p_te->SetAsUnresolved(); + } + } + { + WsCtlReqQueue::Req req(PPSCMD_GETIMAGE); + STRNSCPY(req.P.NameTextUtf8, signature); + req.P.Oid = oid; + P_CmdQ->Push(req); + } + } + else { + Texture_CachedFileEntity * p_cfe = new Texture_CachedFileEntity(); + if(p_cfe && p_cfe->Init(temp_buf)) { + if(p_cfe->Reload(true, &ImgRtb)) { + Cache_Texture.Put(p_cfe); // put program-entry img texture + p_cfe = 0; // ! prevent deletion below + } + } + delete p_cfe; + // + p_te = Cache_Texture.Get(signature); + } + } + } + if(p_te) + p_result = p_te->GetTexture(); + return p_result; + } int ScreenItem_Logo(SUiLayout * pLoParent, int viewFlags) // loidLogo { int result = 0; ImGuiWindowByLayout wbl(pLoParent, loidLogo, "##Logo", viewFlags|ImGuiWindowFlags_NoBackground); if(wbl.IsValid()) { - Texture_CachedFileEntity * p_logo_te = Cache_Texture.Get(GetFilePathS(fnLogo, true, SLS.AcquireRvlStr())); - if(p_logo_te && p_logo_te->GetTexture()) { - const float _x = ImGui::GetWindowWidth(); - const float _y = ImGui::GetWindowHeight(); - ImGui::Image(p_logo_te->GetTexture(), ImVec2(_x, _y)); + DConnectionStatus conn_status; + St.D_ConnStatus.GetData(conn_status); + if(conn_status.Dbi.MainOrgID) { + void * p_texture = QueryImageTextureByOid(PPObjID(PPOBJ_PERSON, conn_status.Dbi.MainOrgID)); + if(p_texture) { + const float _x = ImGui::GetWindowWidth(); + const float _y = ImGui::GetWindowHeight(); + ImGui::Image(p_texture, ImVec2(_x, _y)); + } + } + else { + Texture_CachedFileEntity * p_logo_te = Cache_Texture.Get(GetFilePathS(fnLogo, true, SLS.AcquireRvlStr())); + if(p_logo_te && p_logo_te->GetTexture()) { + const float _x = ImGui::GetWindowWidth(); + const float _y = ImGui::GetWindowHeight(); + ImGui::Image(p_logo_te->GetTexture(), ImVec2(_x, _y)); + } } } return result; @@ -1544,6 +1642,9 @@ int WsCtl_ImGuiSceneBlock::WsCtl_CliSession::Connect(PPJobSrvClient & rCli, DbIn else if(p_cur->Text.IsEqiAscii("server_version")) { pDbInfo->Ver.FromStr(p_cur->P_Child->Text); } + else if(p_cur->Text.IsEqiAscii("main_org_id")) { // @v12.1.11 + pDbInfo->MainOrgID = p_cur->P_Child->Text.ToLong(); + } } } } @@ -1577,39 +1678,53 @@ void WsCtl_ImGuiSceneBlock::WsCtl_CliSession::SendRequest(PPJobSrvClient & rCli, } break; case PPSCMD_GETIMAGE: // @v12.0.6 - if(P_St) { - if(rReq.P.Oid.Obj && rReq.P.Oid.Id) { - WsCtl_ImGuiSceneBlock::DImageLoading st_data; - P_St->D_ImgLd.GetData(st_data); - SString blob_path; - GetBlobStoragePath(blob_path); - SFileStorage fs(blob_path); - { - PPJobSrvCmd cmd; - cmd.StartWriting(PPSCMD_GETIMAGE); - DS.GetObjectTypeSymb(rReq.P.Oid.Obj, temp_buf); - cmd_buf.Z().Cat("GETIMAGE").Space().Cat(temp_buf).Space().Cat(rReq.P.Oid.Id); - if(rCli.ExecSrvCmd(cmd_buf, PPConst::DefSrvCmdTerm, reply)) { - if(reply.StartReading(&temp_buf)) { - PPJobSrvProtocol::TransmitFileBlock tfb; - const size_t rs = reply.Read(&tfb, sizeof(tfb)); - if(rs == sizeof(tfb)) { - if(tfb.Size <= reply.GetAvailableSize()) { - STempBuffer img_buf(tfb.Size); - if(img_buf.IsValid()) { - const size_t rimgs = reply.Read(img_buf, img_buf.GetSize()); - if(rimgs == tfb.Size) { - fs.PutFile(rReq.P.NameTextUtf8, img_buf, img_buf.GetSize()); + if(P_St && rReq.P.Oid.IsFullyDefined()) { + WsCtl_ImGuiSceneBlock::DImageLoading st_data; + P_St->D_ImgLd.GetData(st_data); + SFileStorage fs(GetBlobStoragePathS()); + { + bool local_ok = false; + PPJobSrvCmd cmd; + cmd.StartWriting(PPSCMD_GETIMAGE); + DS.GetObjectTypeSymb(rReq.P.Oid.Obj, temp_buf); + cmd_buf.Z().Cat("GETIMAGE").Space().Cat(temp_buf).Space().Cat(rReq.P.Oid.Id); + if(rCli.ExecSrvCmd(cmd_buf, PPConst::DefSrvCmdTerm, reply)) { + if(reply.StartReading(&temp_buf)) { + PPJobSrvProtocol::TransmitFileBlock tfb; + const size_t rs = reply.Read(&tfb, sizeof(tfb)); + if(rs == sizeof(tfb)) { + if(tfb.Size <= reply.GetAvailableSize()) { + STempBuffer img_buf(static_cast(tfb.Size)); + if(img_buf.IsValid()) { + const size_t rimgs = reply.Read(img_buf, img_buf.GetSize()); + if(rimgs == tfb.Size) { + fs.PutFile(rReq.P.NameTextUtf8, img_buf, img_buf.GetSize()); + // @v12.1.11 { + local_ok = true; + WsCtl_ImGuiSceneBlock::DImageLoading::Entry * p_ile = st_data.L.CreateNewItem(); + if(p_ile) { + p_ile->Oid = rReq.P.Oid; + p_ile->Status = 1; } + // } @v12.1.11 } } } - debug_mark = true; } + debug_mark = true; } } - P_St->D_ImgLd.SetData(st_data); + // @v12.1.11 { + if(!local_ok) { + WsCtl_ImGuiSceneBlock::DImageLoading::Entry * p_ile = st_data.L.CreateNewItem(); + if(p_ile) { + p_ile->Oid = rReq.P.Oid; + p_ile->Status = -1; + } + } + // } @v12.1.11 } + P_St->D_ImgLd.SetData(st_data); } break; case PPSCMD_WSCTL_END_SESS: @@ -2446,10 +2561,6 @@ int WsCtl_ImGuiSceneBlock::ExecuteProgram(const WsCtl_ProgramEntry * pPe) } } { - //SString pic_base_path; - //WsCtlApp::GetLocalCachePath(pic_base_path); - //pic_base_path.SetLastSlash().Cat("img").SetLastSlash(); - //Cache_Texture.SetBasePath(pic_base_path); { const int fn_id_list[] = { fnBackground, fnLogo }; for(uint i = 0; i < SIZEOFARRAY(fn_id_list); i++) { @@ -2617,11 +2728,10 @@ void WsCtl_ImGuiSceneBlock::EmitProgramGallery(ImGuiWindowByLayout & rW, SUiLayo offset.x = -p_scr->GetCurrentPageTopPoint(); } const WsCtl_ProgramEntry * p_clicked_entry = 0; - // @v12.0.8 { - //SString blob_path; - //GetBlobStoragePath(blob_path); - //SFileStorage fs(blob_path); - // } @v12.0.8 + // @v12.1.11 это нам понадобиться для выяснения безнадежности загрузки изображения { // + WsCtl_ImGuiSceneBlock::DImageLoading st_data; + St.D_ImgLd.GetData(st_data); + // } @v12.1.11 for(uint loidx = 0; loidx < p_lo_ipg->GetChildrenCount(); loidx++) { SUiLayout * p_lo_entry = p_lo_ipg->GetChild(loidx); if(p_lo_entry) { @@ -2630,16 +2740,61 @@ void WsCtl_ImGuiSceneBlock::EmitProgramGallery(ImGuiWindowByLayout & rW, SUiLayo if(wbl_entry.IsValid()) { //const uint pe_idx = i-(loidStartProgramEntry+1); const WsCtl_ProgramEntry * p_pe_ = static_cast(SUiLayout::GetManagedPtr(p_lo_entry)); - if(p_pe_ && p_pe_->PicSymb.NotEmpty()) { - Texture_CachedFileEntity * p_te = Cache_Texture.Get(p_pe_->PicSymb); - if(p_te && p_te->GetTexture()) { - if(p_pe_->Title.NotEmpty()) - ImGui::Text(p_pe_->Title); - const SPoint2F __s = p_lo_entry->GetFrame().GetSize(); - ImVec2 sz(__s.x-4.0f, __s.y-16.0f); - ImGui::Image(p_te->GetTexture(), sz); + if(p_pe_) { + bool do_default_frame = true; // Случай когда нет картинки + if(p_pe_->PicSymb.NotEmpty()) { + Texture_CachedFileEntity * p_te = Cache_Texture.Get(p_pe_->PicSymb); + // @v12.1.11 { + if(false) { // Если поставить true, то картинки будут грузиться в real-time, но возникнет торможение :( + if(!p_te || p_te->GetState() != Texture_CachedFileEntity::rstUnresolved) { + if(!Cache_Texture.GetFileStorate().GetFilePath(p_pe_->PicSymb, temp_buf)) { + PPObjID oid(PPOBJ_SWPROGRAM, p_pe_->ID); + const WsCtl_ImGuiSceneBlock::DImageLoading::Entry * p_il_entry = st_data.SearchOid(oid); + if(p_il_entry && p_il_entry->Status == -1) { + if(!p_te) { + Texture_CachedFileEntity * p_cfe = new Texture_CachedFileEntity(); + if(p_cfe) { + p_cfe->SetAsUnresolved(); + Cache_Texture.Put(p_cfe); // put program-entry img texture + p_cfe = 0; // ! prevent deletion below + } + } + else { + p_te->SetAsUnresolved(); + } + } + /* Запрос отправлять здесь не станем (считаем пока, что все запрос отправлены при инициализации сеанса) + WsCtlReqQueue::Req req(PPSCMD_GETIMAGE); + STRNSCPY(req.P.NameTextUtf8, p_pe_->PicSymb); + req.P.Oid.Set(PPOBJ_SWPROGRAM, p_pe_->ID); + P_CmdQ->Push(req); + */ + } + else { + Texture_CachedFileEntity * p_cfe = new Texture_CachedFileEntity(); + if(p_cfe && p_cfe->Init(temp_buf)) { + if(p_cfe->Reload(true, &ImgRtb)) { + Cache_Texture.Put(p_cfe); // put program-entry img texture + p_cfe = 0; // ! prevent deletion below + } + } + delete p_cfe; + // + p_te = Cache_Texture.Get(p_pe_->PicSymb); + } + } + } + // } @v12.1.11 + if(p_te && p_te->GetTexture()) { + if(p_pe_->Title.NotEmpty()) + ImGui::Text(p_pe_->Title); + const SPoint2F __s = p_lo_entry->GetFrame().GetSize(); + ImVec2 sz(__s.x-4.0f, __s.y-16.0f); + ImGui::Image(p_te->GetTexture(), sz); + do_default_frame = false; + } } - else { + if(do_default_frame) { if(p_pe_->Category.NotEmpty()) ImGui::Text(p_pe_->Category); if(p_pe_->Title.NotEmpty()) @@ -2882,65 +3037,40 @@ void WsCtl_ImGuiSceneBlock::LoadProgramList2() } } } - LoadProgramImages(PgmL, Cache_Texture); - PgmL.MakeCatList(); - } -} - -void WsCtl_ImGuiSceneBlock::LoadProgramImages(WsCtl_ProgramCollection & rPgmL, TextureCache & rTextureCache) -{ - SString pic_base_path; - SString temp_buf; - WsCtlApp::GetLocalCachePath(pic_base_path); - pic_base_path.SetLastSlash().Cat("img").SetLastSlash(); - SFile::CreateDir(pic_base_path); // @v12.1.8 - if(pathValid(pic_base_path, 1)) { - //rTextureCache.SetBasePath(pic_base_path); - // @v12.0.6 { - SString file_path; - //SString blob_path; - //GetBlobStoragePath(blob_path); - SFileStorage fs(GetBlobStoragePathS()); - // } @v12.0.6 - for(uint i = 0; i < rPgmL.getCount(); i++) { - WsCtl_ProgramEntry * p_pe = rPgmL.at(i); - if(p_pe) { - if(p_pe->PicSymb.NotEmpty()) { - //int64 file_size = 0; - //SPtrHandle fh = fs.GetFile(p_pe->PicSymb, &file_size); - if(!fs.GetFilePath(p_pe->PicSymb, file_path)) { - //if(!fh) { - // @v12.0.6 @todo - WsCtlReqQueue::Req req(PPSCMD_GETIMAGE); - STRNSCPY(req.P.NameTextUtf8, p_pe->PicSymb); // @v12.0.8 - req.P.Oid.Set(PPOBJ_SWPROGRAM, p_pe->ID); - P_CmdQ->Push(req); - } - else { - Texture_CachedFileEntity * p_cfe = new Texture_CachedFileEntity(); - if(p_cfe && p_cfe->Init(file_path)) { - if(p_cfe->Reload(true, &ImgRtb)) { - rTextureCache.Put(p_cfe); - p_cfe = 0; // ! prevent deletion below + { + SString pic_base_path; + WsCtlApp::GetLocalCachePath(pic_base_path); + pic_base_path.SetLastSlash().Cat("img").SetLastSlash(); + SFile::CreateDir(pic_base_path); + if(pathValid(pic_base_path, 1)) { + SString file_path; + //SFileStorage fs(GetBlobStoragePathS()); + for(uint i = 0; i < PgmL.getCount(); i++) { + WsCtl_ProgramEntry * p_pe = PgmL.at(i); + if(p_pe) { + if(p_pe->PicSymb.NotEmpty()) { + if(!Cache_Texture.GetFileStorate().GetFilePath(p_pe->PicSymb, file_path)) { + WsCtlReqQueue::Req req(PPSCMD_GETIMAGE); + STRNSCPY(req.P.NameTextUtf8, p_pe->PicSymb); + req.P.Oid.Set(PPOBJ_SWPROGRAM, p_pe->ID); + P_CmdQ->Push(req); } - } - delete p_cfe; - } - /* - (temp_buf = pic_base_path).Cat(p_pe->PicSymb); - if(fileExists(temp_buf)) { - Texture_CachedFileEntity * p_cfe = new Texture_CachedFileEntity(); - if(p_cfe && p_cfe->Init(temp_buf)) { - if(p_cfe->Reload(true, &ImgRtb)) { - rTextureCache.Put(p_cfe); - p_cfe = 0; // ! prevent deletion below + else { + Texture_CachedFileEntity * p_cfe = new Texture_CachedFileEntity(); + if(p_cfe && p_cfe->Init(file_path)) { + if(p_cfe->Reload(true, &ImgRtb)) { + Cache_Texture.Put(p_cfe); // put program-entry img texture + p_cfe = 0; // ! prevent deletion below + } + } + delete p_cfe; } } - delete p_cfe; - }*/ + } } } } + PgmL.MakeCatList(); } } diff --git a/Src/Rsrc/Rc/ppbrow.rc2 b/Src/Rsrc/Rc/ppbrow.rc2 index e3deed699b..7f98b9acc1 100644 --- a/Src/Rsrc/Rc/ppbrow.rc2 +++ b/Src/Rsrc/Rc/ppbrow.rc2 @@ -1160,6 +1160,26 @@ browser PERSONATTR_REGISTER north(100), 1, 0, "@{person_pl} {%s}", OWNER|GRID, 0 toolbar PERSON } +browser PERSONATTR_TAG north(100), 1, 0, "@{persontag_pl} {%s}", OWNER|GRID, 0 +{ + "@id", 0, notype, 0, 4 + "@name", 1, notype, 0, 30 + "@tag", 2, notype, 0, 10 + toolbar PERSON +} + +browser PERSONATTR_DLVRADDR north(100), 1, 0, " {%s}", OWNER|GRID, 0 +{ + "@id", 0, notype, 0, 4 + "@name", 2, notype, 0, 30 + "@addresstype", 5, notype, 0, 10 + "@addressid", 1, notype, NMBF_NOZERO, 10 + "@code", 4, notype, 0, 10 + "@city", 6, notype, 0, 20 + "@address", 3, notype, 0, 40 + toolbar PERSON +} + browser PERSONATTR_BNKACCT north(100), 1, 0, "@{bankaccount_pl} {%s}", OWNER|GRID, 0 { "@id", 0, notype, 0, 4 @@ -1190,18 +1210,6 @@ browser PERSONATTR_EMAIL north(100), 1, 0, " toolbar PERSON } -browser PERSONATTR_DLVRADDR north(100), 1, 0, " {%s}", OWNER|GRID, 0 -{ - "@id", 0, notype, 0, 4 - "@name", 2, notype, 0, 30 - "@addresstype", 5, notype, 0, 10 - "@addressid", 1, notype, NMBF_NOZERO, 10 - "@code", 4, notype, 0, 10 - "@city", 6, notype, 0, 20 - "@address", 3, notype, 0, 40 - toolbar PERSON -} - browser PERSONATTR_STDALNADDR north(100), 1, 0, "@{autonomousaddress_pl}", OWNER|GRID, 0 { "@addresstype", 5, notype, 0, 10 @@ -1238,14 +1246,6 @@ browser PERSONATTR_STDALNADDR north(100), 1, 0, "@{autonomousaddress_pl}", OWNER } } -browser PERSONATTR_TAG north(100), 1, 0, "@{persontag_pl} {%s}", OWNER|GRID, 0 -{ - "@id", 0, notype, 0, 4 - "@name", 1, notype, 0, 30 - "@tag", 2, notype, 0, 10 - toolbar PERSON -} - browser PERSONREL north(100), 1, 0, "@{personrelation_pl}", OWNER|GRID, 0 { "@person", 4, notype, 0, 30 diff --git a/Src/Rsrc/Str/ppstr2.symb b/Src/Rsrc/Str/ppstr2.symb index 7e680ab6fe..3fc2fbd51e 100644 --- a/Src/Rsrc/Str/ppstr2.symb +++ b/Src/Rsrc/Str/ppstr2.symb @@ -1,8 +1,8 @@ [common] LastAutoGrpCode=1001 -LastSignatureCode=2147494937 -LastAutoCodeList=1,12253;102,10177;103,10072;110,10000;111,12121;112,10000;119,10000;114,10006;7,10000;4,10000;6,10000;342,10000;118,10152;120,10005;1001,10000;121,10000;122,10000;123,10327;124,10354;125,10064 +LastSignatureCode=2147494946 +LastAutoCodeList=1,12253;102,10177;103,10072;110,10000;111,12121;112,10000;119,10000;114,10006;7,10000;4,10000;6,10000;342,10000;118,10152;120,10005;1001,10000;121,10000;122,10000;123,10327;124,10356;125,10064 [SignatureList] testsign1=2147483649 @@ -354,6 +354,7 @@ incomingdate=2147483945 return=2147483946 returntosuppl=2147483947 returnfrombuyer=2147483948 +returnfrombuyer_pl=2147494941 deficit=2147483949 recompl=2147483950 transfer=2147483951 @@ -923,6 +924,7 @@ bank=2147484399 bank_pl=2147484400 bankcode=2147484401 bankname=2147484402 +bankacquiring=2147494942 marketplace=2147494855 marketplace_pl=2147494856 owner=2147484403 @@ -1142,6 +1144,8 @@ encashment=2147484575 encashment_amount=2147484576 encashment_type_deposit=2147484577 encashment_type_withdrawal=2147484578 +commission=2147494943 +commission_s=2147494944 discountforwholelot_s=2147484579 marginpctg=2147484580 discountpctg=2147484581 @@ -1183,6 +1187,8 @@ sumcost=2147484611 sumcost_s=2147484612 sumprice=2147484613 sumprice_s=2147484614 +sum_clientprice=2147494945 +sum_sellerprice=2147494946 nominalamount=2147484615 sumdeficit=2147484616 sumexcise=2147484617 @@ -4019,6 +4025,9 @@ bzsi_mpamt_shipmsellerprice=2147494922 bzsi_salecost=2147494923 bzsi_freight=2147494928 bzsi_ordcancellationrate=2147494929 +bzsi_saleretcount=2147494938 +bzsi_saleretqtty=2147494939 +bzsi_saleretcost=2147494940 dl2score=2147486948 dl2score_citype=2147486949 dl2score_kind=2147486950 @@ -16480,6 +16489,7 @@ PPHSC_RU_WAREOKEI_BEFORE=8136709 PPHSC_RU_WAREOKEI_AFTER=8136710 PPHSC_RU_WARECODE=8136510 PPHSC_RU_WAREARTICLE=8136706 +PPHSC_RU_WAREARTICLE2=8136819 PPHSC_RU_WAREIDENTBLOCK=8136511 PPHSC_RU_WAREIDENT_PACKCODE=8136512 PPHSC_RU_WAREIDENT_TPACKCODE=8136705 @@ -16644,6 +16654,7 @@ PPHSC_RU_EXTRA_TRACING=8136733 PPHSC_RU_EXTRA_GENDATE=8136798 PPHSC_RU_EXTRA_ORDERCODE=8136799 PPHSC_RU_EXTRA_ORDERDATE=8136800 +PPHSC_RU_EXTRA_ORDERCODE2=8136820 PPHSC_RU_EXTRA_SHIPDATE=8136803 PPHSC_RU_EXTRA_VATRATE=8136804 PPHSC_RU_EXTRA_WHNAME=8136805 diff --git a/Src/Rsrc/Str/ppstr2.txt b/Src/Rsrc/Str/ppstr2.txt index 1cf3228c65..7c4d971ca0 100644 --- a/Src/Rsrc/Str/ppstr2.txt +++ b/Src/Rsrc/Str/ppstr2.txt @@ -6295,6 +6295,7 @@ IMPEXPCMD_DECLNORDER "DECLNORDER" @return "Возврат" @returntosuppl "Возврат поставщику" @returnfrombuyer "Возврат от покупателя" +@returnfrombuyer_pl "Возвраты от покупателей" @deficit "Дефицит" @recompl "Рекомплектация" @transfer "Трансфер" @@ -6875,6 +6876,7 @@ IMPEXPCMD_DECLNORDER "DECLNORDER" @bank_pl "Банки" @bankcode "Код банка" @bankname "Наименование банка" +@bankacquiring "Эквайринг" @marketplace "Маркетплейс" @marketplace_pl "Маркетплейсы" @owner "Владелец" @@ -7095,6 +7097,8 @@ IMPEXPCMD_DECLNORDER "DECLNORDER" @encashment_amount "@{amount}" @encashment_type_deposit "Внесение" @encashment_type_withdrawal "Выплата" +@commission "Комиссионное вознаграждение" +@commission_s "Комиссия" @discountforwholelot_s "На всю партию" // Строка используется в диалогах документов @marginpctg "Процент наценки" @discountpctg "Процент скидки" @@ -7136,6 +7140,8 @@ IMPEXPCMD_DECLNORDER "DECLNORDER" @sumcost_s "Сумма поступления" @sumprice "Сумма в ценах реализации" @sumprice_s "Сумма реализации" +@sum_clientprice "Cумма в ценах конечного покупателя" // @v12.1.11 для маркетплейсов +@sum_sellerprice "Сумма в ценах продавца" // @v12.1.11 для маркетплейсов @nominalamount "Номинальная сумма" @sumdeficit "Сумма дефицита" @sumexcise "Сумма акциза" @@ -10114,6 +10120,9 @@ IMPEXPCMD_DECLNORDER "DECLNORDER" @bzsi_salecost "Себестоимость проданных товаров" @bzsi_freight "Транспортные издержки" @bzsi_ordcancellationrate "Коэффициент отмены заказов" +@bzsi_saleretcount "Количество документов возврата от покупателей" +@bzsi_saleretqtty "Возвращенное от покупателей количество торговых единиц" +@bzsi_saleretcost "Себестоимость возвращенных от покупателей товаров" @dl2score "Примитив бизнес-показателя" @dl2score_citype "" @@ -18553,6 +18562,7 @@ PPHSC_RU_WAREOKEI_BEFORE "ОКЕИ_ТовДо" // @v11.7.0 PPHSC_RU_WAREOKEI_AFTER "ОКЕИ_ТовПосле" // @v11.7.0 PPHSC_RU_WARECODE "КодТов" PPHSC_RU_WAREARTICLE "АртикулТов" // @v11.5.10 +PPHSC_RU_WAREARTICLE2 "код_материала" // @v12.1.11 азбука вкуса требует такой тег для указания ее товарного кода PPHSC_RU_WAREIDENTBLOCK "НомСредИдентТов" PPHSC_RU_WAREIDENT_PACKCODE "НомУпак" PPHSC_RU_WAREIDENT_TPACKCODE "ИдентТрансУпак" // @v11.5.1 @@ -18717,6 +18727,7 @@ PPHSC_RU_EXTRA_TRACING "СведПрослеж" // @v11.7.1 PPHSC_RU_EXTRA_GENDATE "ДатаГен" // @v11.9.12 SBIS PPHSC_RU_EXTRA_ORDERCODE "ЗаказНомер" // @v11.9.12 SBIS PPHSC_RU_EXTRA_ORDERDATE "ЗаказДата" // @v11.9.12 SBIS +PPHSC_RU_EXTRA_ORDERCODE2 "заказ_номер" // @v12.1.11 азбука вкуса требует такой тег для указания номера заказа PPHSC_RU_EXTRA_SHIPDATE "ОтгрузкаДата" // @v11.9.12 SBIS PPHSC_RU_EXTRA_VATRATE "СтавкаНДС" // @v11.9.12 SBIS PPHSC_RU_EXTRA_WHNAME "СкладНаименование" // @v11.9.12 SBIS diff --git a/Src/Rsrc/Version/genver-open.dat b/Src/Rsrc/Version/genver-open.dat index 47de7ef23a..9bc2cabcd8 100644 --- a/Src/Rsrc/Version/genver-open.dat +++ b/Src/Rsrc/Version/genver-open.dat @@ -14,8 +14,8 @@ Demo = 0 OpenSource = 1 MajorVer =12 MinorVer =1 -Revision =10 -AssemblyVer=40730 +Revision =11 +AssemblyVer=40743 MinMajorVer =9 MinMinorVer =8 MinRevision =11 diff --git a/Src/Rsrc/dl600/ppdbs.dl6 b/Src/Rsrc/dl600/ppdbs.dl6 index 2c783930ef..1953d92db3 100644 --- a/Src/Rsrc/dl600/ppdbs.dl6 +++ b/Src/Rsrc/dl600/ppdbs.dl6 @@ -4349,32 +4349,23 @@ file: table TempPerson { long ID; - long TabID; // @v5.3.14 для построения кросстаба с тегами - string Name[128]; // @v6.2.2 [48]-->[128] - - uint PhoneP; + long TabID; // для построения кросстаба с тегами + string Name[128]; // + uint PhoneP; // Ссылка на строку телефона + uint EMailP; // @v12.1.11 Ссылка на строку адреса электронной почты uint AddressP; uint RAddressP; uint BnkNameP; uint BnkAcctP; uint RegSerialP; - //uint RegNumberP; uint FiasAddrGuidP; uint FiasHouseGuidP; - - //string Phone[128]; // @v6.2.2 [64]-->[128] PPPSNATTR_BNKACCT: БИК банка - //string Address[128]; // @v6.2.2 [64]-->[128] - //string RAddress[128]; // @v6.2.2 [64]-->[128] - //string BnkName[128]; // @v6.2.2 [48]-->[128] PPPSNATTR_STANDALONEADDR: Контакт - //string BnkAcct[28]; // @v5.8.10 [24]-->[28] PPPSNATTR_DLVRADDR: Код адреса - //string RegSerial[12]; - string RegNumber[64]; // @v5.0.2 сюда же запихивается значение тега. PPPSNATTR_BNKACCT: Тип счета - long CityID; // @v6.3.2 PPPSNATTR_DLVRADDR: Город в адресе + uint AddrTypeP; // @v12.1.11 Ссылка на строку наименования типа адреса (адрес доставки, юридически, реальный etc) + string RegNumber[64]; // сюда же запихивается значение тега. PPPSNATTR_BNKACCT: Тип счета + long CityID; // PPPSNATTR_DLVRADDR: Город в адресе date RegInitDate; date RegExpiry; - long Flags; // @7.x.x Флаги - //string FiasAddrGuid[36]; // @v8.6.12 - //string FiasHouseGuid[36]; // @v8.6.12 + long Flags; // @flags index: ID, TabID (unique mod); Name acs (dup mod); diff --git a/Src/SLib/Arma.cpp b/Src/SLib/Arma.cpp index 949e083eee..dfea5e5001 100644 --- a/Src/SLib/Arma.cpp +++ b/Src/SLib/Arma.cpp @@ -1,5 +1,5 @@ // ARMA.CPP -// Copyright (c) A.Sobolev 2002, 2003, 2007, 2010, 2011, 2016, 2017, 2020, 2023 +// Copyright (c) A.Sobolev 2002, 2003, 2007, 2010, 2011, 2016, 2017, 2020, 2023, 2024 // #include #pragma hdrstop @@ -89,17 +89,15 @@ int ARMA::Step(double val) { IterCount++; int ok = 1; - uint i; + int i; // @v12.1.11 uint-->int LVect gain_factor, vec_temp; double ape = ComputePredictError(val); gain_factor.init(P+Q+1); ComputeGainFactor(&gain_factor); - vec_temp.copy(gain_factor); vec_temp.saxpy(ape, Model); Model.copy(vec_temp); - - double pe = ComputePredictError(val); + const double pe = ComputePredictError(val); // // Update reverse matrix // R = R - gain_factor * (Phi * R) diff --git a/Src/SLib/Bist.cpp b/Src/SLib/Bist.cpp index a8c87be640..a731ebac97 100644 --- a/Src/SLib/Bist.cpp +++ b/Src/SLib/Bist.cpp @@ -965,8 +965,8 @@ int SBool::comp(const void * p1, const void * p2) const char * SBool::tostr(const void * d, long fmt, char * buf) const { - const long b = BIN(_tolong(d, S)); - return strcpy(buf, b ? "true" : "false"); + const bool b = LOGIC(_tolong(d, S)); + return strcpy(buf, STextConst::GetBool(b)); } int SBool::fromstr(void * d, long fmt, const char * buf) const diff --git a/Src/SLib/Comdisp.cpp b/Src/SLib/Comdisp.cpp index 80e04a51eb..9b040d9b7f 100644 --- a/Src/SLib/Comdisp.cpp +++ b/Src/SLib/Comdisp.cpp @@ -198,7 +198,7 @@ int ComDispInterface::GetProperty(int propertyID, char * pBuf, size_t bufLen) VariantInit(&var_arg); if(pBuf && bufLen > 0) { var_arg.vt = VT_BSTR; - wstr[0] = 0; // @v10.3.0 @fix + wstr[0] = 0; THROW_S(var_arg.bstrVal = SysAllocString(wstr), SLERR_NOMEM); if((ok = _GetProperty(propertyID, &var_arg)) > 0) { WideCharToMultiByte(1251, 0, var_arg.bstrVal, -1, pBuf, static_cast(bufLen), NULL, NULL); diff --git a/Src/SLib/Listwin.cpp b/Src/SLib/Listwin.cpp index 069c7a1da0..d99ec8b38a 100644 --- a/Src/SLib/Listwin.cpp +++ b/Src/SLib/Listwin.cpp @@ -506,7 +506,7 @@ int WordSelector::Helper_PullDown(const char * pText, int recent) r = 1; } if(r <= 0 && CheckVisible() == 1) { - ZDELETE(p_data); // @v10.7.7 + ZDELETE(p_data); ::SetFocus(H()); TView::messageCommand(this, cmCancel); WsState &= ~wssVisible; diff --git a/Src/SLib/TCanvas.cpp b/Src/SLib/TCanvas.cpp index 2ac77fa832..164ed82ff6 100644 --- a/Src/SLib/TCanvas.cpp +++ b/Src/SLib/TCanvas.cpp @@ -2190,9 +2190,7 @@ int FASTCALL SFontDescr::SetLogFont(const LOGFONTW * pLf) { int ok = Helper_SetLogFont(pLf); if(ok > 0) { - // @v10.3.12 SStringU ustr = pLf->lfFaceName; - // @v10.3.12 ustr.CopyToUtf8(Face, 1); - Face.CopyUtf8FromUnicode(pLf->lfFaceName, sstrlen(pLf->lfFaceName), 1); // @v10.3.12 + Face.CopyUtf8FromUnicode(pLf->lfFaceName, sstrlen(pLf->lfFaceName), 1); Face.Utf8ToChar(); } return ok; @@ -2435,12 +2433,10 @@ int SPaintObj::Font::Serialize(int dir, SBuffer & rBuf, SSerializeContext * pCtx // SPaintObj::CStyle::CStyle() : SPaintObj::Base(), FontId(0), PenId(0), BrushId(0) { - // @v10.3.0 (@speedcritical) memzero(Reserve, sizeof(Reserve)); } SPaintObj::CStyle::CStyle(int fontId, int penId, int brushId) : SPaintObj::Base(), FontId(fontId), PenId(penId), BrushId(brushId) { - // @v10.3.0 (@speedcritical) memzero(Reserve, sizeof(Reserve)); } bool FASTCALL SPaintObj::CStyle::IsEq(const CStyle & rS) const @@ -2485,11 +2481,9 @@ int STextLayout::Serialize(int dir, SBuffer & rBuf, SSerializeContext * pCtx) THROW(pCtx->Serialize(dir, Text, rBuf)); THROW(pCtx->Serialize(dir, &CStyleList, rBuf)); THROW(pCtx->Serialize(dir, &ParaList, rBuf)); - // @v10.9.8 { if(dir < 0) { State &= ~(stPreprocessed|stArranged); } - // } @v10.9.8 CATCHZOK return ok; } @@ -2613,7 +2607,6 @@ int STextLayout::Preprocess(SDrawContext & rCtx, SPaintToolBox & rTb) { int ok = 1; const uint cc = static_cast(Text.Len()); - // @v10.9.8 assert(!(State & stPreprocessed) || cc == GlyphIdList.getCount()); if(!(State & stPreprocessed)) { const uint cslc = CStyleList.getCount(); GlyphIdList.clear(); @@ -4252,18 +4245,7 @@ int SPaintToolBox::SetDefaultPen(int style, int width, SColor c) int32 SPaintToolBox::GetDefaultPen() { - return (DefaultPenId || SetDefaultPen(SPaintObj::psSolid, 1, SClrBlack)) ? DefaultPenId : 0; // @v10.9.11 - /* @v10.9.11 - int32 pen_id = 0; - if(DefaultPenId == 0) { - THROW(SetDefaultPen(SPaintObj::psSolid, 1, SClrBlack)); - } - pen_id = DefaultPenId; - CATCH - pen_id = 0; - ENDCATCH - return pen_id; - */ + return (DefaultPenId || SetDefaultPen(SPaintObj::psSolid, 1, SClrBlack)) ? DefaultPenId : 0; } int SPaintToolBox::SetBrush(int ident, int style, COLORREF c, int32 hatch) @@ -4274,10 +4256,6 @@ int SPaintToolBox::SetBrush(int ident, int style, COLORREF c, int32 hatch) int SPaintToolBox::CreatePen(int ident, int style, float width, SColor c) { - /* - SPaintObj * p_obj = CreateObj(ident); - return BIN(p_obj && p_obj->CreatePen(style, width, c)); - */ SPaintObj * p_obj = 0; if(!ident) { SPaintObj::Pen pen; diff --git a/Src/SLib/Twindow.cpp b/Src/SLib/Twindow.cpp index 169c961d1b..4e9b2807e6 100644 --- a/Src/SLib/Twindow.cpp +++ b/Src/SLib/Twindow.cpp @@ -1906,13 +1906,11 @@ PaintEvent::PaintEvent() : PaintType(0), H_DeviceContext(0), Flags(0) } break; case WM_LBUTTONDOWN: - case WM_MOUSEWHEEL: // @v10.5.9 + case WM_MOUSEWHEEL: if(hWnd != GetFocus()) SetFocus(hWnd); - // @v10.2.7 { if(hWnd != GetCapture()) ::SetCapture(hWnd); - // } @v10.2.7 case WM_LBUTTONUP: case WM_LBUTTONDBLCLK: case WM_RBUTTONDOWN: @@ -1922,11 +1920,9 @@ PaintEvent::PaintEvent() : PaintType(0), H_DeviceContext(0), Flags(0) case WM_MBUTTONUP: case WM_MBUTTONDBLCLK: case WM_MOUSEMOVE: - // @v10.5.9 case WM_MOUSEWHEEL: case WM_MOUSELEAVE: case WM_MOUSEHOVER: if(p_view) { - // @v10.2.7 ::SetCapture(hWnd); // @v10.2.2 MouseEvent me; p_view->MakeMouseEvent(message, wParam, lParam, me); if(TView::messageCommand(p_view, cmMouse, &me)) diff --git a/Src/SLib/Wbrowse.cpp b/Src/SLib/Wbrowse.cpp index abe2161e15..88b38afb24 100644 --- a/Src/SLib/Wbrowse.cpp +++ b/Src/SLib/Wbrowse.cpp @@ -310,8 +310,6 @@ void TBaseBrowserWindow::SetResID(uint res) } } -// @v10.9.11 void TBaseBrowserWindow::SetToolbarID(uint toolbarID) { ToolbarID = toolbarID; } - IMPL_HANDLE_EVENT(TBaseBrowserWindow) { if(event.isCmd(cmExecute)) { @@ -364,16 +362,16 @@ IMPL_HANDLE_EVENT(TBaseBrowserWindow) // @v11.2.6 WS_EX_COMPOSITED HW = ::CreateWindowEx(/*WS_EX_COMPOSITED*/0, SUcSwitch(ClsName), p_title, style, r.left, r.top, r.right, r.bottom, (APPL->H_TopOfStack), NULL, TProgram::GetInst(), this); } - if(HW) { // @v10.3.1 + if(HW) { TEvent event; this->handleEvent(event.setCmd(cmModalPostCreate, this)); // @recursion } } - if(BbState & bbsCancel) { // @v10.3.4 + if(BbState & bbsCancel) { clearEvent(event); event.message.infoLong = cmCancel; } - else { // @v10.3.4 + else { ::ShowWindow(H(), SW_NORMAL); ::UpdateWindow(H()); if(APPL->PushModalWindow(this, H())) { @@ -388,12 +386,9 @@ IMPL_HANDLE_EVENT(TBaseBrowserWindow) } } else { - // @v11.0.0 TWindow::handleEvent(event); - // @v11.0.0 if(!event.isCmd(cmSetBounds)) { // Для TBaseBrowserWindow команда cmSetBounds пока не должна обрабатываться поскольку координатная сетка унаследована от MS-DOS TWindowBase::handleEvent(event); } - // } @v11.0.0 } } // @@ -1108,7 +1103,7 @@ IMPL_HANDLE_EVENT(BrowserWindow) { double * p_number = static_cast(event.message.infoPtr); if(p_number) { - char b[1024]; // @v11.1.12 [256]-->[1024] + char b[1024]; P_Def->getText(P_Def->_curItem(), GetCurColumn(), b); strtodoub(b, p_number); } @@ -2717,12 +2712,12 @@ HWND GetNextBrowser(HWND hw) break; case WM_MOUSEHOVER: tp.setwparam(lParam); - /* @construction + ///* @construction { long vpos = 0; - if(p_view->HeaderByPoint(tp, &vpos) && vpos >= 0 && vpos < p_view->P_Def->getCountI()) { + if(p_view->HeaderByPoint(tp, hdrzoneAny, &vpos) && vpos >= 0 && vpos < p_view->P_Def->getCountI()) { const BroColumn & c = p_view->P_Def->at(vpos); - SString temp_buf = c.text; + SString temp_buf(c.text); SMessageWindow * p_win = new SMessageWindow; if(p_win) { temp_buf.ReplaceChar('\003', ' ').Strip(); @@ -2732,7 +2727,7 @@ HWND GetNextBrowser(HWND hw) } } } - */ + //*/ TView::messageBroadcast(p_view, cmMouseHover, &tp); break; case WM_SETFOCUS: @@ -2847,7 +2842,7 @@ HWND GetNextBrowser(HWND hw) UpdateWindow(hWnd); } int done = 0; - if(p_view->HeaderByPoint(tp, hdrzoneSortPoint, &vPos) && vPos >= 0 && vPos < p_view->P_Def->getCountI()) { // @v10.6.3 + if(p_view->HeaderByPoint(tp, hdrzoneSortPoint, &vPos) && vPos >= 0 && vPos < p_view->P_Def->getCountI()) { const BroColumn & c = p_view->P_Def->at(vPos); if(c.Options & BCO_SORTABLE) { long vp1 = vPos+1; diff --git a/Src/SLib/gumbo/tokenizer.c b/Src/SLib/gumbo/tokenizer.c index b682df0b32..0c254f235c 100644 --- a/Src/SLib/gumbo/tokenizer.c +++ b/Src/SLib/gumbo/tokenizer.c @@ -819,7 +819,7 @@ void FASTCALL gumbo_tokenizer_set_state(GumboParser * parser, GumboTokenizerEnum void gumbo_tokenizer_set_is_current_node_foreign(GumboParser * parser, bool is_foreign) { if(is_foreign != parser->_tokenizer_state->_is_current_node_foreign) { - gumbo_debug("Toggling is_current_node_foreign to %s.\n", is_foreign ? "true" : "false"); + gumbo_debug("Toggling is_current_node_foreign to %s.\n", STextConst::GetBool(is_foreign)); } parser->_tokenizer_state->_is_current_node_foreign = is_foreign; } diff --git a/Src/SLib/libxml/SAX2.c b/Src/SLib/libxml/SAX2.c index a32b9ba95b..7e77af7317 100644 --- a/Src/SLib/libxml/SAX2.c +++ b/Src/SLib/libxml/SAX2.c @@ -15,7 +15,7 @@ /* #define DEBUG_SAX2 */ /* #define DEBUG_SAX2_TREE */ -xmlSAXHandler::xmlSAXHandler() // @v10.7.9 +xmlSAXHandler::xmlSAXHandler() { THISZERO(); } diff --git a/Src/SLib/libxml/encoding.c b/Src/SLib/libxml/encoding.c index 69d9503266..a334541e25 100644 --- a/Src/SLib/libxml/encoding.c +++ b/Src/SLib/libxml/encoding.c @@ -3824,7 +3824,7 @@ static void xmlRegisterCharEncodingHandlersISO8859x() xmlNewCharEncodingHandler("ISO-8859-14", ISO8859_14ToUTF8, UTF8ToISO8859_14); xmlNewCharEncodingHandler("ISO-8859-15", ISO8859_15ToUTF8, UTF8ToISO8859_15); xmlNewCharEncodingHandler("ISO-8859-16", ISO8859_16ToUTF8, UTF8ToISO8859_16); - xmlNewCharEncodingHandler("WINDOWS-1251", LibXml_CpHandler_1251::_ToUTF8, LibXml_CpHandler_1251::UTF8To_); // @v10.8.0 + xmlNewCharEncodingHandler("WINDOWS-1251", LibXml_CpHandler_1251::_ToUTF8, LibXml_CpHandler_1251::UTF8To_); } #endif diff --git a/Src/SLib/libxml/libxml.h b/Src/SLib/libxml/libxml.h index ce4b643731..1825682467 100644 --- a/Src/SLib/libxml/libxml.h +++ b/Src/SLib/libxml/libxml.h @@ -17,7 +17,7 @@ #endif #endif #include // @sobolev -#include // @v10.6.5 +#include #define HAVE_LZMA_H 1 // @v10.9.6 #define HAVE_SIGNAL_H 1 // @v11.2.12 // diff --git a/Src/SLib/libxml/xpath.c b/Src/SLib/libxml/xpath.c index 6df6881b3d..b20b40b490 100644 --- a/Src/SLib/libxml/xpath.c +++ b/Src/SLib/libxml/xpath.c @@ -397,11 +397,9 @@ double xmlXPathPINF = 1; double xmlXPathNINF = -1; static double xmlXPathNZERO = 0; /* not exported from headers */ static int xmlXPathInitialized = 0; -/** - * xmlXPathInit: - * - * Initialize the XPath environment - */ +// +// Descr: Initialize the XPath environment +// void xmlXPathInit() { if(!xmlXPathInitialized) { @@ -411,8 +409,7 @@ void xmlXPathInit() xmlXPathPINF = fgetposinf(); xmlXPathNINF = fgetneginf(); xmlXPathNAN = fgetnan(); - // @v10.9.11 xmlXPathNZERO = trio_nzero(); - xmlXPathNZERO = -0.0; // @v10.9.11 + xmlXPathNZERO = -0.0; xmlXPathInitialized = 1; } } @@ -437,10 +434,7 @@ void xmlXPathInit() * * Returns 1 vi the value is +Infinite, -1 if -Infinite, 0 otherwise */ -int FASTCALL xmlXPathIsInf(double val) -{ - return fisinf(val); // @v10.8.1 trio_isinf-->fisinf -} +int FASTCALL xmlXPathIsInf(double val) { return fisinf(val); } #endif /* SCHEMAS or XPATH */ #ifdef LIBXML_XPATH_ENABLED @@ -454,11 +448,7 @@ int FASTCALL xmlXPathIsInf(double val) * * Returns 1 if the value is Negative, 0 if positive */ -static int FASTCALL xmlXPathGetSign(double val) -{ - // @v10.9.11 return trio_signbit(val); - return BIN(val < 0.0); // @v10.9.11 -} +static int FASTCALL xmlXPathGetSign(double val) { return BIN(val < 0.0); } /* * @todo when compatibility allows remove all "fake node libxslt" strings * the test should just be name[0] = ' ' @@ -469,14 +459,7 @@ static int FASTCALL xmlXPathGetSign(double val) #define DEBUG_EVAL_COUNTS #endif -static xmlNs xmlXPathXMLNamespaceStruct = { - NULL, - XML_NAMESPACE_DECL, - XML_XML_NAMESPACE, - reinterpret_cast("xml"), - NULL, - NULL -}; +static xmlNs xmlXPathXMLNamespaceStruct = { NULL, XML_NAMESPACE_DECL, XML_XML_NAMESPACE, reinterpret_cast("xml"), NULL, NULL }; static xmlNs * xmlXPathXMLNamespace = &xmlXPathXMLNamespaceStruct; #ifndef LIBXML_THREAD_ENABLED /* diff --git a/Src/SLib/sfile.cpp b/Src/SLib/sfile.cpp index 560b162fc5..eb46d7e3e0 100644 --- a/Src/SLib/sfile.cpp +++ b/Src/SLib/sfile.cpp @@ -4157,7 +4157,7 @@ int SLldAlphabetAnalyzer::CollectFileData(const char * pFileName) // // // -SCachedFileEntity::SCachedFileEntity() : State(0), ModTime(ZERODATETIME) +SCachedFileEntity::SCachedFileEntity() : P_Entity(0), State(0), ModTime(ZERODATETIME) { } diff --git a/Src/SLib/sstring.cpp b/Src/SLib/sstring.cpp index 137b2462f0..dd0bb828b5 100644 --- a/Src/SLib/sstring.cpp +++ b/Src/SLib/sstring.cpp @@ -1185,7 +1185,7 @@ SString & SString::Utf8ToOem() { return Helper_MbToMb(CP_UTF8, CP_OEMCP); } SString & FASTCALL SString::Utf8ToCp(SCodepageIdent cp) { return Helper_MbToMb(CP_UTF8, static_cast(cp)); } SString & SString::CatEq(const char * pKey, const char * pVal) { return Cat(pKey).Eq().Cat(pVal); } SString & SString::CatEqQ(const char * pKey, const char * pVal) { return Cat(pKey).Eq().CatChar('\"').Cat(pVal).CatChar('\"'); } -SString & SString::CatEq(const char * pKey, bool val) { return Cat(pKey).Eq().Cat(val ? "true" : "false"); } +SString & SString::CatEq(const char * pKey, bool val) { return Cat(pKey).Eq().Cat(STextConst::GetBool(val)); } SString & SString::CatEq(const char * pKey, uint16 val) { return Cat(pKey).Eq().Cat(val); } SString & SString::CatEq(const char * pKey, int val) { return Cat(pKey).Eq().Cat(val); } SString & SString::CatEq(const char * pKey, uint val) { return Cat(pKey).Eq().Cat(val); } diff --git a/Src/SLib/vtbutton.cpp b/Src/SLib/vtbutton.cpp index 1fbc0f0ef8..94a47ad8a5 100644 --- a/Src/SLib/vtbutton.cpp +++ b/Src/SLib/vtbutton.cpp @@ -1,11 +1,10 @@ // VTBUTTON.CPP -// Copyright (c) V.Nasonov 2002, 2003, 2005, 2006, 2007, 2010, 2011, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2023 +// Copyright (c) V.Nasonov 2002, 2003, 2005, 2006, 2007, 2010, 2011, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2023, 2024 // @codepage UTF-8 // #include #pragma hdrstop -// @v10.9.3 #include -#include // @v10.9.3 +#include // // @v8.3.3 Удалены условия __WIN32__ //