Skip to content

Commit

Permalink
Version 12.0.4
Browse files Browse the repository at this point in the history
  • Loading branch information
papyrussolution committed Jun 9, 2024
1 parent 593b665 commit 7ce49c4
Show file tree
Hide file tree
Showing 6 changed files with 131 additions and 73 deletions.
79 changes: 41 additions & 38 deletions Src/Include/Pp.h
Original file line number Diff line number Diff line change
Expand Up @@ -29301,45 +29301,47 @@ enum GoodsGroupTag {
//
// Флаги товаров
//
#define GF_INTVAL 0x00000001L // @transient Целочисленная единица измерения //
#define GF_UNLIM 0x00000002L // @transient Неограниченный ресурс
#define GF_ODD 0x00000004L // @transient Нестандартный товар
#define GF_AUTOCOMPL 0x00000008L // @transient Автокомплект
#define GF_GENERIC 0x00000010L // Обобщенный товар
//
#define GF_ABSEXCISE 0x00000020L // Obsolete Акциз в денежных единицах (не процентах)
#define GF_ZEXCISE 0x00000040L // Obsolete Нулевой акциз (акциз не наследуется от группы)
#define GF_ZVAT 0x00000080L // Obsolete Нулевой НДС (НДС не наследуется от группы)
//
#define GF_TAXFACTOR 0x00000020L // ExtRec содержит ненулевой налоговый фактор
#define GF_PRICEWOTAXES 0x00000040L // UC Цена реализации товара указана без всех операционных налогов
#define GF_EXTPROP 0x00000080L // Товар имеет запись расширенных свойств (PPGoodsPacket::ExtString)
#define GF_ALTGROUP 0x00000100L // Альтернативная группа
#define GF_FOLDER 0x00000200L // Группа верхнего уровня //
#define GF_PASSIV 0x00000400L // Пассивный товар
#define GF_NODISCOUNT 0x00000800L // На товар не распространяется общая скидка
#define GF_EXCLALTFOLD 0x00001000L // Папка, объединяющая непересекающиеся альтернативные группы
#define GF_UNIQPCKGCODE 0x00002000L // Уникальный код пакета
#define GF_DFLTPCKGTYPE 0x00004000L // Тип пакета по умолчанию
#define GF_PCKG_AROWS 0x00008000L //
#define GF_PCKG_ANEWROW 0x00010000L //
#define GF_ASSETS 0x00020000L // @transient Основные фонды. Проекция флага GTF_ASSETS типа, которому принадлежит товар
#define GF_WROFFBYPRICE 0x00040000L // Списывать основное средство исходя из остаточной стоимости
#define GF_TRANSGLED 0x00080000L // @transient Признак передачи в пакете структуры GoodsLotExtData
#define GF_VOLUMEVAL 0x00100000L // Объем упаковки поставки задается одним значением
#define GF_TRANSQUOT 0x00200000L // @transient Пакет передачи предназначен для трансмиссии котировок
#define GF_INTVAL 0x00000001L // @transient Целочисленная единица измерения //
#define GF_DERIVED_HASIMAGES 0x00000001L // @v12.0.4 Это флаг используется объектами данных, отличными от PPOBJ_GOODS и хранящимися в той же таблице goods2.
// Значение 0x01 нельзя так просто поменять, поскольку базы данных уже используют такое значение. До версии 12.0.4 применялась мнемоника BRNDF_HASIMAGES__ (теперь она удалена)
#define GF_UNLIM 0x00000002L // @transient Неограниченный ресурс
#define GF_ODD 0x00000004L // @transient Нестандартный товар
#define GF_AUTOCOMPL 0x00000008L // @transient Автокомплект
#define GF_GENERIC 0x00000010L // Обобщенный товар
//
#define GF_ABSEXCISE 0x00000020L // Obsolete Акциз в денежных единицах (не процентах)
#define GF_ZEXCISE 0x00000040L // Obsolete Нулевой акциз (акциз не наследуется от группы)
#define GF_ZVAT 0x00000080L // Obsolete Нулевой НДС (НДС не наследуется от группы)
//
#define GF_TAXFACTOR 0x00000020L // ExtRec содержит ненулевой налоговый фактор
#define GF_PRICEWOTAXES 0x00000040L // UC Цена реализации товара указана без всех операционных налогов
#define GF_EXTPROP 0x00000080L // Товар имеет запись расширенных свойств (PPGoodsPacket::ExtString)
#define GF_ALTGROUP 0x00000100L // Альтернативная группа
#define GF_FOLDER 0x00000200L // Группа верхнего уровня //
#define GF_PASSIV 0x00000400L // Пассивный товар
#define GF_NODISCOUNT 0x00000800L // На товар не распространяется общая скидка
#define GF_EXCLALTFOLD 0x00001000L // Папка, объединяющая непересекающиеся альтернативные группы
#define GF_UNIQPCKGCODE 0x00002000L // Уникальный код пакета
#define GF_DFLTPCKGTYPE 0x00004000L // Тип пакета по умолчанию
#define GF_PCKG_AROWS 0x00008000L //
#define GF_PCKG_ANEWROW 0x00010000L //
#define GF_ASSETS 0x00020000L // @transient Основные фонды. Проекция флага GTF_ASSETS типа, которому принадлежит товар
#define GF_WROFFBYPRICE 0x00040000L // Списывать основное средство исходя из остаточной стоимости
#define GF_TRANSGLED 0x00080000L // @transient Признак передачи в пакете структуры GoodsLotExtData
#define GF_VOLUMEVAL 0x00100000L // Объем упаковки поставки задается одним значением
#define GF_TRANSQUOT 0x00200000L // @transient Пакет передачи предназначен для трансмиссии котировок
// Сами товары не меняются. Не удаляются остутствующие в пакете, но присутствующие в базе котировки.
#define GF_TEMPALTGRP_ 0x00400000L //
#define GF_USEINDEPWT 0x00800000L // Операции по товару ведуться параллельно в торговых и физических единицах
#define GF_DYNAMIC 0x01000000L // Динамическая альтернативная группа
#define GF_HASIMAGES 0x02000000L // К товару присоединены картинки
#define GF_ABBREQNAME 0x04000000L // @transient Используется у элементов кэша для информации о том, что
#define GF_TEMPALTGRP_ 0x00400000L //
#define GF_USEINDEPWT 0x00800000L // Операции по товару ведуться параллельно в торговых и физических единицах
#define GF_DYNAMIC 0x01000000L // Динамическая альтернативная группа
#define GF_HASIMAGES 0x02000000L // К товару присоединены картинки
#define GF_ABBREQNAME 0x04000000L // @transient Используется у элементов кэша для информации о том, что
// сокращенное наименование эквивалентно полному.
#define GF_EXCLVAT 0x08000000L // @transient Наследуется от типа товара (GTF_EXCLVAT) при извлечении через кэш
#define GF_AUTOCREATE 0x10000000L // Признак того, что товар (группа) создан автоматически (например, при импорте внешнего документа, содержащего этот товар)
#define GF_UNCLASSF 0x20000000L // Признак группы, бренда или иного контейнера, содержащего неклассифицированные товары.
#define GF_EXCLVAT 0x08000000L // @transient Наследуется от типа товара (GTF_EXCLVAT) при извлечении через кэш
#define GF_AUTOCREATE 0x10000000L // Признак того, что товар (группа) создан автоматически (например, при импорте внешнего документа, содержащего этот товар)
#define GF_UNCLASSF 0x20000000L // Признак группы, бренда или иного контейнера, содержащего неклассифицированные товары.
// Используется для автоматической классификации.
#define GF_WANTVETISCERT 0x40000000L // @v10.1.8 Требует сертификата на приход и отгрузку
#define GF_WANTVETISCERT 0x40000000L // @v10.1.8 Требует сертификата на приход и отгрузку

#define GF_TEMPALTGROUP (GF_ALTGROUP|GF_TEMPALTGRP_) // Временная альтернативная группа
#define GF_DB_FLAGS_GROUP (GF_ALTGROUP|GF_FOLDER|GF_EXCLALTFOLD)
Expand Down Expand Up @@ -30810,7 +30812,7 @@ class PPObjTransport : public PPObjGoods {
// PPObjBrand
// Объект, управляющий информацией о товарных брэндах
//
#define BRNDF_HASIMAGES 0x00000001L
// @v12.0.4 (replaced with GF_DERIVED_HASIMAGES) #define BRNDF_HASIMAGES__ 0x00000001L

class BrandFilt : public PPBaseFilt {
public:
Expand Down Expand Up @@ -31180,7 +31182,7 @@ class PPObjSwProgram : public PPObjGoods { // @construction
int Get(PPID, PPSwProgramPacket *);
int Put(PPID *, PPSwProgramPacket *, int use_ta);
virtual void * CreateObjListWin(uint aFlags, void * extraPtr);
SJson * ExportToJson();
SJson * ExportToJson(const char * pImgPath);
int ImportFromJson(const SJson * pJs, const char * pImgPathUtf8);
private:
virtual ListBoxDef * Selector(ListBoxDef * pOrgDef, long flags, void * extraPtr);
Expand Down Expand Up @@ -31216,6 +31218,7 @@ class PPViewSwProgram : public PPView { // @construction
virtual void ViewTotal();
int _GetDataForBrowser(SBrowserDataProcBlock * pBlk);
int MakeList();
int Export();

SArray * P_DsList;
SwProgramFilt Filt;
Expand Down
8 changes: 4 additions & 4 deletions Src/PPLib/Objggrp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2222,7 +2222,7 @@ class BrandDialog : public TDialog {
{
ImageBrowseCtrlGroup::Rec rec;
Data.LinkFiles.Init(PPOBJ_BRAND);
if(Data.Rec.Flags & BRNDF_HASIMAGES)
if(Data.Rec.Flags & GF_DERIVED_HASIMAGES)
Data.LinkFiles.Load(Data.Rec.ID, 0L);
Data.LinkFiles.At(0, rec.Path);
setGroupData(ctlgroupIbg, &rec);
Expand All @@ -2245,7 +2245,7 @@ class BrandDialog : public TDialog {
}
else
Data.LinkFiles.Remove(0);
SETFLAG(Data.Rec.Flags, BRNDF_HASIMAGES, Data.LinkFiles.GetCount());
SETFLAG(Data.Rec.Flags, GF_DERIVED_HASIMAGES, Data.LinkFiles.GetCount());
}
ASSIGN_PTR(pData, Data);
CATCHZOKPPERRBYDLG
Expand Down Expand Up @@ -3121,7 +3121,7 @@ int PPViewBrand::CellStyleFunc_(const void * pData, long col, int paintAction, B
const BroColumn & r_col = p_def->at(col);
if(col == 0) { // id
const BrwItem * p_item = static_cast<const BrwItem *>(pData);
if(p_item->Flags & BRNDF_HASIMAGES) {
if(p_item->Flags & GF_DERIVED_HASIMAGES) {
pCellStyle->Flags |= BrowserWindow::CellStyle::fLeftBottomCorner;
pCellStyle->Color2 = GetColorRef(SClrGreen);
ok = 1;
Expand Down Expand Up @@ -3183,7 +3183,7 @@ int PPViewBrand::ProcessCommand(uint ppvCmd, const void * pHdr, PPViewBrowser *
}
break;
case PPVCMD_MOUSEHOVER:
if(id && static_cast<const BrwItem *>(pHdr)->Flags & BRNDF_HASIMAGES) {
if(id && static_cast<const BrwItem *>(pHdr)->Flags & GF_DERIVED_HASIMAGES) {
SString img_path;
ObjLinkFiles link_files(PPOBJ_BRAND);
link_files.Load(id, 0L);
Expand Down
110 changes: 82 additions & 28 deletions Src/PPLib/objg_etc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1335,7 +1335,7 @@ class ComputerDialog : public TDialog {
{
ImageBrowseCtrlGroup::Rec rec;
Data.LinkFiles.Init(PPOBJ_COMPUTER);
if(Data.Rec.Flags & BRNDF_HASIMAGES)
if(Data.Rec.Flags & GF_DERIVED_HASIMAGES)
Data.LinkFiles.Load(Data.Rec.ID, 0L);
Data.LinkFiles.At(0, rec.Path);
setGroupData(ctlgroupIbg, &rec);
Expand All @@ -1362,7 +1362,7 @@ class ComputerDialog : public TDialog {
}
else
Data.LinkFiles.Remove(0);
SETFLAG(Data.Rec.Flags, BRNDF_HASIMAGES, Data.LinkFiles.GetCount());
SETFLAG(Data.Rec.Flags, GF_DERIVED_HASIMAGES, Data.LinkFiles.GetCount());
}
ASSIGN_PTR(pData, Data);
CATCHZOKPPERRBYDLG
Expand Down Expand Up @@ -1556,7 +1556,7 @@ static int PPViewComputer_CellStyleFunc(const void * pData, long col, int paintA
preserve_id = id;
switch(ppvCmd) {
case PPVCMD_MOUSEHOVER:
if(id && static_cast<const BrwItem *>(pHdr)->Flags & BRNDF_HASIMAGES) {
if(id && static_cast<const BrwItem *>(pHdr)->Flags & GF_DERIVED_HASIMAGES) {
SString img_path;
ObjLinkFiles link_files(PPOBJ_COMPUTER);
link_files.Load(id, 0L);
Expand Down Expand Up @@ -1743,7 +1743,7 @@ class SwProgramDialog : public TDialog {
{
ImageBrowseCtrlGroup::Rec rec;
Data.LinkFiles.Init(PPOBJ_SWPROGRAM);
if(Data.Rec.Flags & BRNDF_HASIMAGES)
if(Data.Rec.Flags & GF_DERIVED_HASIMAGES)
Data.LinkFiles.Load(Data.Rec.ID, 0L);
Data.LinkFiles.At(0, rec.Path);
setGroupData(ctlgroupIbg, &rec);
Expand All @@ -1767,7 +1767,7 @@ class SwProgramDialog : public TDialog {
}
else
Data.LinkFiles.Remove(0);
SETFLAG(Data.Rec.Flags, BRNDF_HASIMAGES, Data.LinkFiles.GetCount());
SETFLAG(Data.Rec.Flags, GF_DERIVED_HASIMAGES, Data.LinkFiles.GetCount());
}
ASSIGN_PTR(pData, Data);
CATCHZOKPPERRBYDLG
Expand Down Expand Up @@ -1989,7 +1989,7 @@ int PPObjSwProgram::Get(PPID id, PPSwProgramPacket * pPack)
return ok;
}

SJson * PPObjSwProgram::ExportToJson()
SJson * PPObjSwProgram::ExportToJson(const char * pImgPath)
{
SJson * p_result = SJson::CreateObj();
Reference * p_ref = PPRef;
Expand Down Expand Up @@ -2049,10 +2049,11 @@ int PPObjSwProgram::ImportFromJson(const SJson * pJs, const char * pImgPathUtf8)
if(SearchByName(pack.Rec.Name, &ex_id, 0) > 0) {
PPSwProgramPacket ex_pack;
if(Get(ex_id, &ex_pack) > 0) {
if(ex_pack.LinkFiles.GetCount() == 0 && pack.LinkFiles.GetCount()) {
if(pack.LinkFiles.GetCount() && (ex_pack.LinkFiles.GetCount() == 0 || !(ex_pack.Rec.Flags & GF_DERIVED_HASIMAGES))) {
pack.LinkFiles.At(0, img_file_name);
if(fileExists(img_file_name)) {
ex_pack.LinkFiles.Replace(0, img_file_name);
ex_pack.Rec.Flags |= GF_DERIVED_HASIMAGES;
THROW(Put(&ex_id, &ex_pack, 0));
}
}
Expand All @@ -2075,6 +2076,12 @@ int PPObjSwProgram::ImportFromJson(const SJson * pJs, const char * pImgPathUtf8)
}
{
PPID new_id = 0;
if(pack.LinkFiles.GetCount()) {
pack.LinkFiles.At(0, img_file_name);
if(fileExists(img_file_name)) {
pack.Rec.Flags |= GF_DERIVED_HASIMAGES;
}
}
THROW(Put(&new_id, &pack, 0));
}
}
Expand All @@ -2089,34 +2096,77 @@ int PPObjSwProgram::ImportFromJson(const SJson * pJs, const char * pImgPathUtf8)
return ok;
}

int ImportSwProgram()
{
struct SwProgramImpExpParam {
SString FilePath;
SString ImgPath;
};

class SwProgramImpExpDialog : public TDialog {
enum {
ctlgroupFile = 1,
ctlgroupImgDir = 2
};
int ok = -1;
SString file_name;
SString img_path;
TDialog * dlg = new TDialog(DLG_IMPSWPGM);
if(CheckDialogPtrErr(&dlg)) {
FileBrowseCtrlGroup::Setup(dlg, CTLBRW_IMPSWPGM_FILE, CTL_IMPSWPGM_FILE, ctlgroupFile,
DECL_DIALOG_DATA(SwProgramImpExpParam);
public:
SwProgramImpExpDialog() : TDialog(DLG_IMPSWPGM)
{
FileBrowseCtrlGroup::Setup(this, CTLBRW_IMPSWPGM_FILE, CTL_IMPSWPGM_FILE, ctlgroupFile,
0, PPTXT_FILPAT_JSON, FileBrowseCtrlGroup::fbcgfFile);
FileBrowseCtrlGroup::Setup(dlg, CTLBRW_IMPSWPGM_IMGDIR, CTL_IMPSWPGM_IMGDIR, ctlgroupImgDir,
FileBrowseCtrlGroup::Setup(this, CTLBRW_IMPSWPGM_IMGDIR, CTL_IMPSWPGM_IMGDIR, ctlgroupImgDir,
0, PPTXT_FILPAT_JSON, FileBrowseCtrlGroup::fbcgfPath);
}
DECL_DIALOG_SETDTS()
{
int ok = 1;
RVALUEPTR(Data, pData);
setCtrlString(CTL_IMPSWPGM_FILE, Data.FilePath);
setCtrlString(CTL_IMPSWPGM_IMGDIR, Data.ImgPath);
return ok;
}
DECL_DIALOG_GETDTS()
{
int ok = 1;
getCtrlString(CTL_IMPSWPGM_FILE, Data.FilePath);
getCtrlString(CTL_IMPSWPGM_IMGDIR, Data.ImgPath);
ASSIGN_PTR(pData, Data);
return ok;
}
};

int PPViewSwProgram::Export()
{
int ok = -1;
SwProgramImpExpParam param;
SwProgramImpExpDialog * dlg = new SwProgramImpExpDialog();
if(CheckDialogPtrErr(&dlg)) {
dlg->setDTS(&param);
if(ExecView(dlg) == cmOK) {
dlg->getCtrlString(CTL_IMPSWPGM_FILE, file_name);
dlg->getCtrlString(CTL_IMPSWPGM_IMGDIR, img_path);
if(fileExists(file_name)) {
img_path.Transf(CTRANSF_INNER_TO_UTF8);
if(!SFile::IsDir(img_path)) {
SFsPath ps(file_name);
ps.Merge(SFsPath::fDrv|SFsPath::fDir, img_path);
dlg->getDTS(&param);
}
}
delete dlg;
return ok;
}

int ImportSwProgram()
{
int ok = -1;
SwProgramImpExpParam param;
SwProgramImpExpDialog * dlg = new SwProgramImpExpDialog();
if(CheckDialogPtrErr(&dlg)) {
dlg->setDTS(&param);
if(ExecView(dlg) == cmOK) {
dlg->getDTS(&param);
if(fileExists(param.FilePath)) {
param.ImgPath.Transf(CTRANSF_INNER_TO_UTF8);
if(!SFile::IsDir(param.ImgPath)) {
SFsPath ps(param.FilePath);
ps.Merge(SFsPath::fDrv|SFsPath::fDir, param.ImgPath);
}
PPObjSwProgram swpgm_obj;
SJson * p_js = SJson::ParseFile(file_name);
SJson * p_js = SJson::ParseFile(param.FilePath);
if(p_js) {
swpgm_obj.ImportFromJson(p_js, img_path);
swpgm_obj.ImportFromJson(p_js, param.ImgPath);
ZDELETE(p_js);
}
}
Expand Down Expand Up @@ -2225,7 +2275,7 @@ static int PPViewSwProgram_CellStyleFunc(const void * pData, long col, int paint
const BroColumn & r_col = p_def->at(col);
if(col == 0) { // id
const BrwItem * p_item = static_cast<const BrwItem *>(pData);
if(p_item->Flags & BRNDF_HASIMAGES) { // @todo replace BRNDF_HASIMAGES with ...
if(p_item->Flags & GF_DERIVED_HASIMAGES) { // @todo replace GF_DERIVED_HASIMAGES with ...
pCellStyle->Flags |= BrowserWindow::CellStyle::fLeftBottomCorner;
pCellStyle->Color2 = GetColorRef(SClrGreen);
ok = 1;
Expand Down Expand Up @@ -2268,7 +2318,7 @@ static int PPViewSwProgram_CellStyleFunc(const void * pData, long col, int paint
int ok = -1;
return ok;
}

/*virtual*/int PPViewSwProgram::ProcessCommand(uint ppvCmd, const void * pHdr, PPViewBrowser * pBrw)
{
int ok = PPView::ProcessCommand(ppvCmd, pHdr, pBrw);
Expand All @@ -2277,8 +2327,12 @@ static int PPViewSwProgram_CellStyleFunc(const void * pData, long col, int paint
PPID id = pHdr ? *static_cast<const PPID *>(pHdr) : 0;
preserve_id = id;
switch(ppvCmd) {
case PPVCMD_EXPORT:
{
}
break;
case PPVCMD_MOUSEHOVER:
if(id && static_cast<const BrwItem *>(pHdr)->Flags & BRNDF_HASIMAGES) {
if(id && static_cast<const BrwItem *>(pHdr)->Flags & GF_DERIVED_HASIMAGES) {
SString img_path;
ObjLinkFiles link_files(PPOBJ_SWPROGRAM);
link_files.Load(id, 0L);
Expand Down
2 changes: 1 addition & 1 deletion Src/PPLib/ppserver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2812,7 +2812,7 @@ PPWorkerSession::CmdRet PPWorkerSession::ProcessCommand_(PPServerCmd * pEv, PPJo
PPBrand brand_rec;
THROW(brand_obj.Fetch(obj_id, &brand_rec) > 0);
obj_name = brand_rec.Name;
THROW_PP_S(brand_rec.Flags & BRNDF_HASIMAGES, PPERR_OBJHASNTIMG, obj_name);
THROW_PP_S(brand_rec.Flags & GF_DERIVED_HASIMAGES, PPERR_OBJHASNTIMG, obj_name);
}
else if(obj_type == PPOBJ_PERSON) {
PPObjPerson psn_obj;
Expand Down
Loading

0 comments on commit 7ce49c4

Please sign in to comment.