Вы не вошли - Войти

Пример отчета Остатки товаров

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.Сумма);
}