mirror of
https://github.com/salexdv/bsl_console.git
synced 2025-02-01 13:08:06 +02:00
Режим запроса: подсказки для ресурсов виртуальных таблицы регистров
This commit is contained in:
parent
449a7914af
commit
5ec96f8c5c
@ -1713,6 +1713,84 @@ class bslHelper {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns subresources for the virtual table type
|
||||
*
|
||||
* @param {string} subTable subtable name like balance, turnovers, periodical
|
||||
* @param {string} regType type of subtable like balance, turnovers, periodical
|
||||
*
|
||||
* @returns {array} array of subresources
|
||||
*/
|
||||
getGetVirtualTableSubresouces(subTable, regType) {
|
||||
|
||||
let subresouces = {};
|
||||
|
||||
if (engLang) {
|
||||
|
||||
if (subTable == 'balance') {
|
||||
subresouces = {
|
||||
"Balance": "(balance)"
|
||||
};
|
||||
}
|
||||
else if (subTable == 'turnovers') {
|
||||
if (regType == 'balance')
|
||||
subresouces = {
|
||||
"Receipt": "(receipt)",
|
||||
"Expense": "(expense)",
|
||||
"Turnover": "(turnover)"
|
||||
};
|
||||
else
|
||||
subresouces = {
|
||||
"Turnover": "(turnover)"
|
||||
};
|
||||
|
||||
}
|
||||
else if (subTable == 'balanceandturnovers') {
|
||||
subresouces = {
|
||||
"OpeningBalance": "(opening balance)",
|
||||
"Receipt": "(receipt)",
|
||||
"Expense": "(expense)",
|
||||
"Turnover": "(turnover)",
|
||||
"ClosingBalance": "(closing balance)"
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
if (subTable == 'остатки') {
|
||||
subresouces = {
|
||||
"Остаток": "(остаток)"
|
||||
};
|
||||
}
|
||||
else if (subTable == 'обороты') {
|
||||
if (regType == 'balance')
|
||||
subresouces = {
|
||||
"Приход": "(приход)",
|
||||
"Расход": "(расход)",
|
||||
"Оборот": "(оборот)"
|
||||
};
|
||||
else
|
||||
subresouces = {
|
||||
"Оборот": "(оборот)"
|
||||
};
|
||||
}
|
||||
else if (subTable == 'остаткииобороты') {
|
||||
subresouces = {
|
||||
"НачальныйОстаток": "(начальный остаток)",
|
||||
"Приход": "(приход)",
|
||||
"Расход": "(расход)",
|
||||
"Оборот": "(оборот)",
|
||||
"КонечныйОстаток": "(конечный остаток)"
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return subresouces;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the list of properties (attributes) owned by object
|
||||
* (Catalog, Document, etc) and fills the suggestions by it
|
||||
@ -1755,6 +1833,49 @@ class bslHelper {
|
||||
});
|
||||
}
|
||||
|
||||
let resources = [];
|
||||
|
||||
if (obj.hasOwnProperty('resources')) {
|
||||
|
||||
for (const [rkey, rvalue] of Object.entries(obj.resources)) {
|
||||
resources.push({'label': rkey, 'name': rvalue.name});
|
||||
}
|
||||
|
||||
let regType = obj.hasOwnProperty('type') ? obj.type : '';
|
||||
let subresouces = this.getGetVirtualTableSubresouces(metadataSubtable, regType);
|
||||
let subExists = false;
|
||||
let items = [];
|
||||
|
||||
for (let idx = 0; idx < resources.length; idx++) {
|
||||
|
||||
let resource = resources[idx];
|
||||
|
||||
for (const [skey, svalue] of Object.entries(subresouces)) {
|
||||
subExists = true;
|
||||
items.push({'label': resource.label + skey, 'name': resource.name + ' ' + svalue});
|
||||
}
|
||||
|
||||
if (!subExists)
|
||||
items.push(resource);
|
||||
|
||||
}
|
||||
|
||||
for (let idx = 0; idx < items.length; idx++) {
|
||||
|
||||
let item = items[idx];
|
||||
|
||||
suggestions.push({
|
||||
label: item.label,
|
||||
kind: monaco.languages.CompletionItemKind.value,
|
||||
insertText: item.label,
|
||||
insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
|
||||
detail: item.name
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -1914,13 +2035,13 @@ class bslHelper {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns temporary tables of register depending on the register's type
|
||||
* Returns virtual tables of register depending on the register's type
|
||||
*
|
||||
* @param {string} type of register like balance, turnovers, periodical
|
||||
*
|
||||
* @returns {array} array of names
|
||||
*/
|
||||
getRegisterTempraryTables(type) {
|
||||
getRegisterVirtualTables(type) {
|
||||
|
||||
let tables = {};
|
||||
|
||||
@ -1994,7 +2115,7 @@ class bslHelper {
|
||||
}
|
||||
|
||||
/**
|
||||
* Fills array of completition for temporary tables of registers in source
|
||||
* Fills array of completition for virtual tables of registers in source
|
||||
*
|
||||
* @param {object} data objects from BSL-JSON dictionary
|
||||
* @param {string} metadataItem name of metadata item like (ЦеныНоменклатуры/ProductPrices, СвободныеОстатки/AvailableStock)
|
||||
@ -2006,7 +2127,7 @@ class bslHelper {
|
||||
|
||||
if (ikey.toLowerCase() == metadataItem.toLowerCase() && ivalue.hasOwnProperty('type')) {
|
||||
|
||||
let tables = this.getRegisterTempraryTables(ivalue.type);
|
||||
let tables = this.getRegisterVirtualTables(ivalue.type);
|
||||
|
||||
for (const [tkey, tvalue] of Object.entries(tables)) {
|
||||
|
||||
|
@ -1110,7 +1110,11 @@
|
||||
'////////////////////////////////////////////////////////////////////////////////',
|
||||
'ВЫБРАТЬ',
|
||||
' Товары.Ссылка КАК Ссылка,',
|
||||
' Цены.Цена КАК Цена',
|
||||
' Цены.Цена КАК Цена,',
|
||||
' Остатки.Номенклатура КАК Остатки_Номенклатура,',
|
||||
' Обороты.Номенклатура КАК Обороты_Номенклатура,',
|
||||
' ОстаткиИОбороты.Номенклатура КАК ОстаткиИОбороты_Номенклатура,',
|
||||
' Продажи.Номенклатура КАК Продажи_Номенклатура',
|
||||
'ИЗ',
|
||||
' Справочник.Товары КАК Товары',
|
||||
' ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(',
|
||||
@ -1124,6 +1128,8 @@
|
||||
' ПО Товары.Ссылка = Обороты.Номенклатура',
|
||||
' ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты КАК ОстаткиИОбороты',
|
||||
' ПО Товары.Ссылка = ОстаткиИОбороты.Номенклатура',
|
||||
' ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты КАК Продажи',
|
||||
' ПО Товары.Ссылка = Продажи.Номеклатура',
|
||||
'ГДЕ',
|
||||
' Товары.Ссылка <> &Товар'
|
||||
].join('\n');
|
||||
|
@ -218,6 +218,50 @@ describe("Проверка автокомлита и подсказок реда
|
||||
assert.equal(suggestions.some(suggest => suggest.label === "ВидЦены"), true);
|
||||
});
|
||||
|
||||
it("проверка подсказки полей виртуальной таблицы остатков", function () {
|
||||
bsl = helper(getCode(), 1095, 10);
|
||||
let suggestions = [];
|
||||
bsl.getQueryFieldsCompletition(suggestions);
|
||||
expect(suggestions).to.be.an('array').that.not.is.empty;
|
||||
assert.equal(suggestions.some(suggest => suggest.label === "КоличествоОстаток"), true);
|
||||
assert.equal(suggestions.some(suggest => suggest.label === "КоличествоНачальныйОстаток"), false);
|
||||
assert.equal(suggestions.some(suggest => suggest.label === "КоличествоПриход"), false);
|
||||
assert.equal(suggestions.some(suggest => suggest.label === "КоличествоОборот"), false);
|
||||
});
|
||||
|
||||
it("проверка подсказки полей виртуальной таблицы остатков и оборотов", function () {
|
||||
bsl = helper(getCode(), 1097, 18);
|
||||
let suggestions = [];
|
||||
bsl.getQueryFieldsCompletition(suggestions);
|
||||
expect(suggestions).to.be.an('array').that.not.is.empty;
|
||||
assert.equal(suggestions.some(suggest => suggest.label === "КоличествоПриход"), true);
|
||||
assert.equal(suggestions.some(suggest => suggest.label === "КоличествоОборот"), true);
|
||||
assert.equal(suggestions.some(suggest => suggest.label === "КоличествоНачальныйОстаток"), true);
|
||||
assert.equal(suggestions.some(suggest => suggest.label === "КоличествоОстаток"), false);
|
||||
});
|
||||
|
||||
it("проверка подсказки полей виртуальной таблицы оборотов (вид регистра 'Остатки')", function () {
|
||||
bsl = helper(getCode(), 1096, 10);
|
||||
let suggestions = [];
|
||||
bsl.getQueryFieldsCompletition(suggestions);
|
||||
expect(suggestions).to.be.an('array').that.not.is.empty;
|
||||
assert.equal(suggestions.some(suggest => suggest.label === "КоличествоПриход"), true);
|
||||
assert.equal(suggestions.some(suggest => suggest.label === "КоличествоОборот"), true);
|
||||
assert.equal(suggestions.some(suggest => suggest.label === "КоличествоОстаток"), false);
|
||||
assert.equal(suggestions.some(suggest => suggest.label === "КоличествоНачальныйОстаток"), false);
|
||||
});
|
||||
|
||||
it("проверка подсказки полей виртуальной таблицы оборотов (вид регистра 'Обороты')", function () {
|
||||
bsl = helper(getCode(), 1098, 10);
|
||||
let suggestions = [];
|
||||
bsl.getQueryFieldsCompletition(suggestions);
|
||||
expect(suggestions).to.be.an('array').that.not.is.empty;
|
||||
assert.equal(suggestions.some(suggest => suggest.label === "КоличествоОборот"), true);
|
||||
assert.equal(suggestions.some(suggest => suggest.label === "КоличествоПриход"), false);
|
||||
assert.equal(suggestions.some(suggest => suggest.label === "КоличествоОстаток"), false);
|
||||
assert.equal(suggestions.some(suggest => suggest.label === "КоличествоНачальныйОстаток"), false);
|
||||
});
|
||||
|
||||
switchQueryMode();
|
||||
|
||||
mocha.run();
|
||||
|
Loading…
x
Reference in New Issue
Block a user