выполнить запрос из кода ВРМ 7.6 и выгрузить в Excel

Добрый день!
Коллеги подскажите как реализовать следующую задачу,
мне нужно в разделе в пункте меню «Действия» , в базе выполнить запрос (select )
затем результат выгрузить в Excel файл.

спасибо!

Нравится

27 комментариев

Добрый день Евгений!!!

зачем писать вам запрос если вы можете с помощью "Расширенного фильтра" выполнить фильтрацию и результат Экспортировать в Эксель в формате CSV. Для выполнения экспорта в Эксель в CSV формате в меню Действия есть пункт меню "Экспортировать список в файл".

при помощи расширенного фильтра не получается , запрос из нескольких таблиц,
есть еще несколько условий.

Евгений, или использовать расшиенный фильтр (с/без агрегирующих фильтров)

или писать запрос с помощьб ESQ - https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/rabota-s-danny…

Евгений день добрый!!!

а зачем писать запрос, если результатом будет пользоваться пользователь. И как известно у пользователей всегда аппетиты меняются. Вам тогда все время придется переписывать запрос. А не легче вашу задачу разделить на более мелкие и уже отсюда настроить для пользователей Расширенные фильтры?

Добрый день!
Дело в том что задача именно поставлена таким образом, и результатом нужен файл который будет доступен другим пользователям (без врм), и потом это начальная задача нужна чтобы получить опыт работы с функционалом, в дальнейшем использовать для создания других более сложных отчетов.
Хотелось бы получить информацию именно по поставленной задаче, а не обходные пути решения при помощи фильтров.

"Евдокимов Евгений" написал:Хотелось бы получить информацию именно по поставленной задаче, а не обходные пути решения при помощи фильтров.

Евгений это не обходной путь, это правильный путь который закладывает по умолчанию Компания Террасофт в свою систему. Чтобы именно пользователь с помощью стандартного функционала смог выполнить построение любых "сложных" фильтров, и после использовать результаты данных выборок в своей работе.

по вашей задачи, вам тогда требуется изучить документацию на Академии по ссылке что предоставлял Илья и если будут вопросы, задать уже в данной теме. спасибо!!!

Есть у меня нестандартная выгрузка.... Могу в почту скинуть инструкцию. Только select у вас "жесткий" будет в этом случае.

Добрый день! Рассматриваю все варианты, у меня запрос в любом случае там большой,
если не сложно то на envg@mail.ru можете скинуть?

к тому же в инструкции выше сам процесс выгрузки в excel не описан, или до него не дошел.

"Дмитрий Степанов" написал:Есть у меня нестандартная выгрузка.... Могу в почту скинуть инструкцию. Только select у вас "жесткий" будет в этом случае.

Дмитрий день добрый!!!

поделитесь пожалуйста и со мной нестандартной выгрузкой, для повышения опыта. Спасибо!!! мой емайл vlasov-mv@yandex.ru

коллеги возник вопрос

в запросе

showInfo: function() {
var test = this.get("ActiveRow");
var test1 = this.get("projektsumm");
this.showInformationDialog(test1);
},

значение ActiveRow (test) отображается в окне , а когда пытаюсь выдать сообщение
со значением в поле projektsumm пусто

"Евдокимов Евгений" написал:значение ActiveRow (test) отображается в окне , а когда пытаюсь выдать сообщение
со значением в поле projektsumm пусто

Евгений "projektsumm" - это объект или значение, т.е это справочная информация Lookup или Значение Decimal? плюс метод "showInformationDialog" первым значение "caption" принимает строковое значение. хотя это может быть не причиной. нужно смотреть вам Евгений, что у вас возвращает "this.get("projektsumm")".

это значение -дробное число.
так же пробовал выводить accountid (это ссылка на Контрагента)
тоже пустое окно выходит

Вы когда дробное число объявляли, точность указали? :)
Инструкция во вложении

да Decimal (18,2)
спасибо за инструкцию, будем рабираться

Да не то!

"InPrice": {
dataValueType: Terrasoft.DataValueType.FLOAT,
precision: 2
},

Вопрос Дмитрий. А как точность влияет на вывод данных на экран? Ваше мнение. Я все больше склонялся к тому, что тип данных не соответствовал входящим параметрам метода "showInformationDialog". Но какие только эксперименты на Яваскрипте не провел, это не повлияло. На C# да влияет все. Яваскрипт более гибгий оказался к данному вопросу. Как я уже писал выше не видя полностью кода, иногда очень сложно ответить на данные вопросы. так как у себя тестируешь все это-же самое элементарное, все работает.

как говорят в медецине. неверно собранный анамнез :)

Я на Ваш вопрос ответить не в состоянии. Но данную проблему я решал в рамках преднастроенной страницы, так вот единственный способ заставить дробное нормально отображаться - вот такой, кстати метод предложен саппортом.

вот весь кусок кода
define('DPZzayvkiSection', ['GridUtilitiesV2','GeneralDetails','BusinessRuleModule',"GoogleIntegrationUtilities", "RightUtilities",
"ConfigurationConstants", "GoogleIntegrationUtilitiesV2"],

function(resources,GoogleUtilities) {
return {
entitySchemaName: 'DPZzayvki',
contextHelpId: '1001',
diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
messages: {},
methods: {

getSectionActions: function() {
var actionMenuItems = this.callParent(arguments);
actionMenuItems.addItem(this.getButtonMenuItem({
//Type: "Terrasoft.MenuSeparator",
Caption: "Проверить суммy на лимит",
Enabled: { "bindTo": "isAnySelected" },
Click: { bindTo: 'showInfo'},
}));
actionMenuItems.addItem(this.getButtonMenuItem({
//Type: "Terrasoft.MenuSeparator",
Caption: "in Excel",
Enabled: { "bindTo": "isAnySelected" },
Click: { bindTo: 'report'},
}));

return actionMenuItems;
},
showInfo: function() {
var test = this.get("number");
this.showInformationDialog(test);
},

проблемное место выделил поле number строковое
и в этом случае диалоговое окно пустое
я в замешательстве , кроме ActiveRow никакие значения не выводятся(
хочу понять что я делаю не так?

а что-то у меня сомнения в this.

var activeRow = this.get("ActiveRow");
var item = this.get("GridData").get(activeRow);
var account = item.get("Account"); // например

но только вы имейте в виду, что item = this.get("GridData").get(activeRow); вам даст только то, что изображено в гриде. Если хотите что-то еще, то придется esq применять. Как - примеров полно.

selectRegnumOtherAccount: function(callback, regnum, config) {
var viewModel = this;
var recordId = this.get("Id");
var select = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "Account"
});
select.addMacrosColumn(Terrasoft.QueryMacrosType.PRIMARY_COLUMN, "Id");
select.addColumn("Name");
select.addColumn("UsrRegNumber");
var filters = Ext.create("Terrasoft.FilterGroup");
filters.addItem(select.createColumnFilterWithParameter(Terrasoft.ComparisonType.NOT_EQUAL, "Id",
recordId));
filters.addItem(select.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "UsrRegNumber",
regnum));
select.filters = filters;
select.execute(function(response) {
if (response.success) {
if (response.collection.getCount() > 0) {
var selectAccount = response.collection.getByIndex(0);
viewModel.set("myOtherAccountId", selectAccount.get("Id"));
viewModel.set("myExistsOtherAccount", true);
callback.call(this, response);
} else {
viewModel.set("myExistsOtherAccount", false);
callback.call(this, response);
}
}
}, viewModel);
},

вот что получается

а если number строковое поле то снова пустое окно

после того как добавил колонку в грид
number стал отображаться в окне

"Евдокимов Евгений" написал:после того как добавил колонку в грид
number стал отображаться в окне

Евгений так это естественно. Все колонки в запрос не попадают. Попадают только те которые есть в профили Раздела и те которые мы ручками добавляем в метод Раздела "getGridDataColumns". Вот его пример:

getGridDataColumns: function() {
     var gridDataColumns = this.callParent(arguments);
     if (!gridDataColumns.Document) {
          gridDataColumns.Document = {
               path: "Document"
          };
     }
     return gridDataColumns;
}

с полем account разобрался добавил value и в окне появился id записи

var test = item.get("account").value;

спасибо за примеры!

сложно начинающим разобраться !

Михаил, getGridDataColumns - прикольнее, чем у меня было :) Хотя у меня было универсальнее :)

"Дмитрий Степанов" написал:Хотя у меня было универсальнее :)

А универсальнее это как Дмитрий. Поделитесь опытом. Я иду по стандартным канонам, что заложены в Базовую модель, в Базовые страницы. И вот если что-то стандартного не хватает, вот тогда расширяю, написав при этом новые классы, новые инструменты и т.д.

Показать все комментарии