function run() {
var date = context.inParams.Date;
var lines = context.inParams.Lines || [];
var linesList = context.inParams.LinesList || [];
var showGoodGroups = context.inParams.ShowGoodGroups;
var goods = context.inParams.Goods || [];
var subdivs = context.inParams.Subdivs || [];
var groupsCount = context.inParams.GroupsCount;
var groupFields = [];
linesList.forEach((line) => {
switch(line) {
case 'Склады':
if (lines.indexOf(line) >= 0) {
groupFields.push(new TreeGroup('Склад'));
}
break;
case 'Товары':
if (lines.indexOf(line) >= 0) {
groupFields.push(new TreeGroup({ fieldName: 'Товар', addGroups: showGoodGroups }));
} else if (showGoodGroups) {
groupFields.push(new TreeGroup({fieldName: 'Товар', addGroups: true, onlyGroups: true, maxGroupLevel: groupsCount }));
}
break;
}
});
var criteria = createRestQuery("Остатки товаров")
.sum('Количество')
.sum('Сумма')
.onDate(date);
groupFields.forEach((group) => {
criteria.select(group.fieldName);
});
if (goods.length > 0)
criteria.whereIn('Товар', getAllCodes('Товары', goods));
if (subdivs.length > 0)
criteria.whereIn('Склад', getAllCodes('Склады', subdivs));
var result = context.repository.executeQuery(criteria);
if (groupFields.length > 0)
result = result.buildTree(groupFields, ['Количество', 'Сумма']);
var rep = createReport('ОстаткиТоваров.tcrp');
rep.addSection("Шапка");
rep.setParameter("Период", "на: " + toString(date));
if (subdivs.length > 0)
rep.setParameter("Склады", "По складам: " + getDictNames("Склады", subdivs));
if (goods.length > 0)
rep.setParameter("Товары", "По товарам: " + getDictNames("Товары", goods));
rep.addSection("Таблица");
result.processLevels((r, level, group) =>
{
if (group == null)
return;
var property = r.getProperty(group.fieldName);
rep.addSection(level.toString());
var typeName = property.field.objName;
rep.setParameter("Type", typeName);
rep.setParameter("Code", r[group.fieldName]);
rep.setParameter("Код", r[group.fieldName]);
rep.setParameter("Наим", r.getString(group.fieldName));
if (typeName == "Товары")
rep.setParameter("Единица", property.getString("Единица измерения"));
var qnt = r.Количество;
var amount = r.Сумма;
rep.setParameter("Кол", qnt);
rep.setParameter("Цена", qnt != 0 ? amount / qnt : 0);
rep.setParameter("Сум", amount);
});
result.toBegin();
result.read();
rep.addSection("Подвал");
rep.setParameter("Кол", result.Количество);
rep.setParameter("Сум", result.Сумма);
}